Day03-02. 생성자, 복사생성자 호출
C,C++/CONCEPT 2018. 3. 7. 16:44 | /*
2-1. 호출시기
(1) 객체 생성시 객체를 인자로 줄 경우
A aa -- 생성자 호출
A bb (aa) -- 복사생성자 호출
(2) 객체 생성시 객체를 대입할 경우
A aa -- 생성자 호출
A bb = aa; -- 복사생성자 호출
(3) 멤버함수의 매개변수로 객체를 선언할 경우
void A::disp(A aa) -- 복사생성자 호출
(4) 멤버함수에서 객체를 리턴할 경우
A get()object()
{
return 객체; // 복사생성자 호출
}
2-2. 객체의 모든 멤버의 값을 복사하는 기능을 제공
2-3. 기본적으로 얕은 복사를 제공한다
2-4. 깊은 복사는 기본적으로 제공하지 않기 때문에 개발자가 필요에 의해 제공해야한다
*/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #include <iostream> using namespace std; class A { int a; int b; public: A(int a=0, int b=0) { this->a = a; // (*this).a = a; // 전자가 많이쓰임 this->b = b; } A(const A& aa ) // 복사생성자 (default 값을 없애버림) // 언제호출되는지만 말고 건들이지마라 알아서해줌 { // 전달되는 인자를 레퍼런스로 받기때문에 내용변경을 불가능하기 위해서 const로 상수화시키기 cout<<"복사생성자"<<endl; a = aa.a; b = aa.b; } // 함수의 이름은 함수의 기능을 나타내도록 작성하는 것이 코드를 작성하고 // 유지.보수하기가 좋다 // 값대입 void setA(int a){this->a = a;} void setB(int b){this->b = b;} // 값리턴 int getA(){return a;} int getB(){return b;} }; void main() { A aa; A bb(10,20); cout<<aa.getA()<<'\t'<<aa.getB()<<endl; // 0 0 cout<<bb.getA()<<'\t'<<bb.getB()<<endl; // 10 20 A cc(bb); // 복사생성자 호출 // cc=bb 와 같은말, 전체 카피 cout<<cc.getA()<<'\t'<<cc.getB()<<endl; // 10 20 } | cs |
'C,C++ > CONCEPT' 카테고리의 다른 글
Day04-01 (0) | 2018.03.08 |
---|---|
Day03-01. 생성자. 복사생성자 (0) | 2018.03.07 |
Day03-03. 생성자와 소멸자의 개념 (0) | 2018.03.07 |
Day03-05. 생성자함수, 복사생성자함수, 소멸자함수 호출순서 (0) | 2018.03.07 |
Day03-01. 생성자 함수 (0) | 2018.03.07 |