C++/summary 70

프렌드와 연산자 중복

클래스 프랜드 전역함수 클래스 프랜드 클래스 클래스 프랜드 멤버함수 - > 친구가 되면 , 비공개 멤버에 접근할수 있다. - > 구현하기가 쉬워진다. -> 가급적이면 조금만 사용하라 -> 관리하기가 힘들다. 프렌드 함수 선언 방법 프렌드 함수의 원형은 비록 클래스 안에 포함 하지만 멤버 함수는 아니다. 프렌드 함수의 본체는 외부에서 따로 정의 프렌드 함수는 클래스 내부의 모든 멤버 변수를 사용 가능 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

클래스의 활용 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

클래스를 사용해보자

객체는 속성과 동작을 지닌다. 자동차가 객체라면 클래스는 설계도 이다. class Car { //비공개를 먼저 선언하고 //그 다음에 공개를 정의한다. public: // 멤버 변수 선언 int speed; // 속도 int gear; // 기어 string color; // 색상 // 멤버 함수 선언 void speedUp() { // 속도 증가 멤버 함수 speed += 10; } void speedDown() { // 속도 감소 멤버 함수 speed -= 10; } }; - > 이 클래스는 값의 입력 및 변경이 불가능하다. 잘못된 설계의 클래스다. class Car { private: // 멤버 변수 선언 int speed; //속도 int gear; //기어 string color; //색상 ....

C++/summary 2010.05.25

String 클래스

문자열이 증가 해도 계속적으로 사용가능하다. #include // 스트링 인클루드를 해준다. using namespace std; // 이것도 필요하다. string s1 = "This is a test."; // string 객체를 생성하고 초기화한다. 하지만 클래스에서 정의 하는 방식은 string s2("Hello World"); // 이런 식으로 () 이용하여서 문자열을 초기화 한다. string s3; -> 하지만 하위 호환성을 위해서 기존 방식으로 해도 가능. 연산자 함수 cout s1.operator + (s2); if ( s1 == s2 ) // 문자열을 비교한다. => s1. operator == (s2); cout

C++/summary 2010.05.25