C++ 97

String 연산자 구현.

#include using std::endl; using std::cout; using std::cin; using std::ostream; using std::istream; //////string 헤더 구현//////// class string{ //string객체 선언 int len; //길이 char* str; //멤버 변수 public: string(const char* s=NULL); //생성자 string(const string& s); //깊은복사생성자 ~string(); //소멸자 string& operator=(const string& s); //깊은 복사 대입연산자 string& operator+=(const string& s); //리턴타입이 참조 bool operator==(con..

C++/Function 2010.06.20

연산자 중복

sum = x + y + z 이것을 구현하자. 멤버 함수로 구현. 비멤버 함수(프랜드 함수)로 구현 // 인자 갯수의 차이가 난다. 원점 벡터 예제 private: double x, y; public: Vector(double x, int double){ this->x = x; this->y = y; } 반환형 operator연산자(매개 변수 목록) { ....// 연산 수행 } (예) Vector operator+(const Vector&, const Vector&); // 반환값이 클래스. // 공개된 멤버만 접근이 불가해서, 프렌드로 구현하는게 좋다. 실질적인 예를 살펴보자 비멤버 함수(레퍼런스)로 구현. class Vector { private: double x, y; public: Vector(..

C++/summary 2010.06.11

프렌드와 연산자 중복

클래스 프랜드 전역함수 클래스 프랜드 클래스 클래스 프랜드 멤버함수 - > 친구가 되면 , 비공개 멤버에 접근할수 있다. - > 구현하기가 쉬워진다. -> 가급적이면 조금만 사용하라 -> 관리하기가 힘들다. 프렌드 함수 선언 방법 프렌드 함수의 원형은 비록 클래스 안에 포함 하지만 멤버 함수는 아니다. 프렌드 함수의 본체는 외부에서 따로 정의 프렌드 함수는 클래스 내부의 모든 멤버 변수를 사용 가능 class Company { private: int sales, profit; // sub()는 Company의 전용 부분에 접근할 수 있다. friend void sub(Company& c); public: Company(): sales(0), profit(0) { } }; void sub(Company& ..

C++/summary 2010.06.10

복소수 함수

복소수 : v1 : 1+ 2i v2 : 2+3i 합 3+5i v3 = v1.add(v2); #include using namespace std; class Complex { private: double real; // 실수부 double imag; // 허수부 public: Complex(); // 생성자 Complex(double a, double b); // 생성자 ~Complex(); // 소멸자 double getReal(); // 실수부를 반환한다. double getImag(); //허수부를 반환한다. Complex add(const Complex& c); // 복소수의 덧셈 연산을 구현한다. void print(); // 복소수를 출력한다. }; Complex::Complex() { real..

C++/Function 2010.06.10

클래스의 활용 2

객체의 포인터가 함수에 전달 Car mine(); Car you(); swap( &mine, &you); void swap(Car *p1, Car *p2) { Car tmp; tmp = *p1; *p1 = *p2; *p2 = tmp; p1->display(); p2->display(); } 객체의 레퍼런스가 함수에 전달 Car mine(); Car you(); swap( mine, you); void swapObjects(Car &r1, Car &r2) // 레퍼런스를 사용 { Car tmp; tmp = r1; r1 = r2; r2 = tmp; r1.display(); r2.display(); } 1. 함수 안에서 매개 변수로 전달받은 객체의 내용을 수정하려면 매개 변수를 어떤 타입으로 선언하여야 하는가..

C++/summary 2010.06.10

클래스의 활용.

Car myCar ; // 정적 메모리 할당으로 객체 생성 Car *pCar = new Car(); // 동적 메모리 할당으로 객체 생성 - 힙 공간에 할당, 그 시작주소를 참조 // 반드시 해제할 필요. pCar->speed = 100; // 접근 방법 pCar->speedUp(); // 화살표 연산자를 통해서 = (*pCar). speedUp(); Car(int s=0, int g=1, string c="white") : speed(s), gear(g), color(c) { } // 초기화 리스트 : 상수 , 객체, 레퍼런스 등이 꼭필요 , color() 만 필요하다. ------------------------------- Car myCar; // 정적 메모리 할당으로 객체 생성 myCar.disp..

C++/summary 2010.06.08

String 클래스의 구현 형태 - 클래스 정리.

#include using namespace std; class MyString { private: char *pBuf; //동적으로 할당된 메모리의 주소값 저장 public: MyString(const char *s=NULL); MyString(MyString& s); ~MyString(); void print(); // 문자열을 화면에 출력 int getSize(); // 문자열의 길이 반환 }; // 생성자 MyString::MyString(const char *s) { if( s == NULL ) { pBuf = new char[1]; pBuf[0] = NULL; } else { pBuf = new char[::strlen(s)+1]; strcpy(pBuf, s); } } // 복사 생성자 MyS..

C++/summary 2010.06.03

초기화 리스트 && 복사 생성자. && 디폴트 멤버 함수,.

초기화 리스트 Car(int s, int g, string c) : speed(s), gear(g), color(c) // 멤버 변수에 초기값을 넣어준다. { // 만약 더 하고 싶은 초기화가 있다면 여기에 } 왜 쓰냐??? - 상수 멤버를 초기화 시킬때. class Car { const int MAX_SPEED = 300; // 오류다 , 멤버 변수에는 초기화 불가능하다. int speed; // 속도 } class Car { const int MAX_SPEED; int speed; // 속도 public: Car() { MAX_SPEED = 300; // 컴파일 오류! 이것 또한 오류다, 일반변수랑 컨스트랑 구별을 위해서. } } 그래서 class Car { const int MAX_SPEED; in..

C++/summary 2010.06.03

생성자 && 소멸자.

생성자 : 객체가 생성될 때에 필드에게 초기값을 제공하고 필요한 초기화 절차를 실행하는 멤버 함수 -> 객체 자체에는 접근을 할수가 없으므로, 초기에 비공개 멤버변수를 초기화. 객체의 생성- 생성자 - 객체의 사용 - 소멸자 - 객체의 파괴 기본형식은 class Car { public : Car() // 반환값이 존재하지 않는다. { 초기화를 정의한다. } Car(){} // 중복정의가 가능하다. } - > 생성자는 객체를 사용하면 자동으로 생성된다 Car :: Car() 외부 정의도 가능하지만, 간결해서 보통 안에 적는다. Car(int s, int g, string c) { } // 매개변수를 가지는 생성자 호출은 Car c1( 1, 2, "red" ); Car c2 = car(1, 2, "red")..

C++/summary 2010.06.01

클래스 - 멤버 함수의 외부 정의

class car{ public : int speed; int getSpeed(){} // 흔히 이런식으로 멤버 함수를 정의 하지만 }; // 함수가 길어지면 보기 복잡해진다. 그래서 class car{ public : int speed; int getSpeed(); // 이렇게 호출한후 }; int car :: getSpeed(){ return speed }; // 선언해준다. , 인라인 처럼 쓸려면 앞에 인라인 붙여주면 됨. 내부 정의는 자동으로 인라인 함수가 된다. - > 오버헤드가 없어진다. (짧은 함수를 호출할때) 하지만 외부 정의는 인라인 아니다. 실질적 코드는 이렇다 class Car { public: int getSpeed(); void setSpeed(int s); void honk();..

C++/summary 2010.05.27