목록프로그래밍언어/C++ (55)
nakka soft world !
this. 1. 개념 class Point{private: int x;int y;public:void set(int a, int b) // void (Point* const this, int a, int b) {x = a; // this->x = a; y = b; // this->y = b; }};int main(){Point p1;Point p2; p1.set(10, 20); // set( &p1, 10, 20) 으로 컴파일되어 이 함수가 p1꺼라는것 을 알 수 있게 함. } x가 p1꺼인지 p2꺼인지 알 수 없음. 따라서 컴파일러가 컴파일되는 시점에 this call로 변경됨. class Point{private: int x;int y;public:void foo() {cout
상수 멤버 함수 (const member function) 1. 개요 class Point{private: int x, y;public :Point(int a = 0, int b = 0) : x(a), y(b) {} void set(int a, int b){x = a;y = b;}void print() const // 상수 멤버 함수 - 모든 멤버를 상수 취급 하는 함수{x = 10; // error cout
정적 멤버 데이터 (static member data) class Car{private:int color;public:int cnt = 0;Car() { ++cnt; }~Car() { --cnt; }}; int main(){Car c1, c2; cout
Object Copy Swallow Copy & Deep Copy 1. 얕은 복사class People{private:char* name;int age;public:People(char* n, int a) : age(a){name = new char[strlen(n)+1];strcpy(name, n);}~People(){delete[] name;} };int main(){People p1("kim", 2);People p2(p1); // runtime error.// 복사 생성자 호출.} 어떠한 클래스가 포인터를 가지고 있을때 default복사 생성자는 동째로 복사 하지 않고 주소 만 복사함.(얕은 복사) 소멸될때 하나의 객체가 메모리를 해제 하면 다른 객체가 소멸하려고 접근시 에러발생. 2. 얕은 복사..
복사 생성자 (Copy Constructor) 1. 기본class Point{public:int x, y;Point(): x(0), y(0) {}Point(int a, int b): x(a), y(b) {} // 컴파일러가 생성해주는 복사 생성자. 사용자가 만들어도 무방함.Point(const Point& p){x = p.x;y = p.y;}};int main(){Point p1; // OKPoint p2(1, 2); // OKPoint p3(1); // ErrorPoint p4(p2); // Point(Point). 사용자가 만들지 않았지만 Compiler가 만들어줌. 자기 자신을 파라메터로 하는 생성자 cout
initialize list, 초기화 리스트 1. 개념 class Point{int x, y; public:Point(int a = 0, int b = 0) : x(a), y(b) // 초기화 리스트, 진정한 초기화.{x = a; // 대입y = b; // 대입}}; int main(){int n1 = 0; // 초기화 int n2;n2 = 0; // 대입 Object o1 = 0; // 초기화, 생성자. Object o2; // 생성자o2 = 0; // 대입, 대입 연산자} int와 같은 것는 상관없지만, Object와 같은 거는 생성하고 다시 호출하여 대입하기에 2번 작업 하는것과 동일 효과. 대입보다는 초기화가 빠름. int main(){const int c1 = 0; // OKconst int c..
소멸자는 여러개 만들 수 없고, 1개만 만들 수 있음. 파라메터 없음.소멸자를 만들지 않으면 컴파일러가 만듦. class Point{private:int x;int y;public:Point() { cout
default function, delete function - C++11/14 class Point{private:int x;int y;public:Point() {}Point() = default; // default를 하지 않아도 되나 관례상 하는 경우 있음. Point(int a, int b) { cout
class Point{private:int x;int y;public:Point() {cout
class Stack{private :int ids;int* buff; public:Stack() { idx = 0; } // OK // friendfirend void foo(); // 멤버함수는 아니지만 친구니까 Private변수 접근이 가능하다. 꼭 필요할때만 사용하도록. 연산자 재정의 때 주로 사용.friend class AAA; // AAA안에 있는 모든 멤버 함수는 Provate접근가능하다. }; void foo(){Stack s;s.idx = 0; // friend 이면 ok }