/*
    AAA(const AAA& a){
        x=a.x;
        y=a.y;
    }

*/

이 부분이 복사 생성자이다.
하지만 주석 처리를 하여도 main() 함수의 AAA test2(test1);에 대한 에러가 없다. 이유는 디폴트 복사 생성자 때문이다.

디폴트 복사 생성자는 디폴트 생성자와 다르게 아무 일도 하지 않는 것은 아니다.

즉, 복사 생성자를 AAA(const AAA& a){ } 이런 형태로 선언하면 쓰레기값이 출력된다. 하지만 복사 생성자를 선언하지 않는다면 (자동으로 삽입되는) 디폴트 복사 생성자에 의해서 주석 처리를 하지 않았을 때와 같은 결과가 출력된다.

쉽게 말해서 위의 주석 처리된 코드가 디폴트 복사 생성자라고 보면 된다.



#include <iostream>
using namespace std;

class AAA
{
    int x, y;

public:
    AAA(int x1, int y1){
        x = x1;
        y = y1;
    }

/*
    AAA(const AAA& a){
        x=a.x;
        y=a.y;
    }

*/
    void show(){
        cout << x <<' '<< y << endl;
    }
};

int main(void)
{
    AAA test1(10, 20);
    AAA test2(test1);

    test1.show();
    test2.show();

    return 0;


'프로그래밍 > C++' 카테고리의 다른 글

상속의 이해  (0) 2014.02.06
생성자 (Constructor)  (0) 2014.02.06
explicit 예제  (0) 2013.09.06
두 개의 Circle 클래스를 기반으로 한 Ring 클래스 생성  (0) 2013.08.22
난수 사용하기  (0) 2013.07.25
참조자와 함수의 호출관계  (0) 2013.07.24
new & delete 기본 사용법  (0) 2013.07.23

+ Recent posts