/*
    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=0int b=0)
    {
        this->= a; // (*this).a = a; // 전자가 많이쓰임
        this->= b;
    }
 
    A(const A& aa ) // 복사생성자 (default 값을 없애버림) // 언제호출되는지만 말고 건들이지마라 알아서해줌
    { // 전달되는 인자를 레퍼런스로 받기때문에 내용변경을 불가능하기 위해서 const로 상수화시키기
        cout<<"복사생성자"<<endl;
        a = aa.a;
        b = aa.b;
    }
 
    // 함수의 이름은 함수의 기능을 나타내도록 작성하는 것이 코드를 작성하고
    // 유지.보수하기가 좋다
 
    // 값대입
    void setA(int a){this->= a;}  void setB(int b){this->= 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


Posted by 너래쟁이
: