Invisible Rover 's Blog :D :: 복사 생성자 , c++ style....;

'생성자'에 해당되는 글 1건

  1. 복사 생성자 , c++ style....; 2008/04/17
C언어에서 변수의 초기화는 대게 대입연산자를 통해서 했는데 c++로 넘어오면서 다른 방식이 생겼다.

C 초기화 스타일.
int num = 0;

C++ 초기화 스타일.
int num(0);

시작부터 왠 잡설 -ㅅ-? 하는데 이런 형식의 초기화를 사용하여 객체를 복사할수 있다.
미리 생성한 객체와 나중에 생성한 객체가 같은 값을 가지길 원한다면 아래와 같이 코딩해보쟈 ㅋㅋ

#include<iostream>

using std::cout;
using std::endl;

class test{
    int x;
    int y;

public:
    test(int _x , int _y){    //생성자.
        x = _x;
        y = _y;
    }

    test(test & copy){        //복사 생성자.
        x = copy.x;
        y = copy.y;
    }

    void print(){
        cout<<"x = "<<x<<endl
            <<"y = "<<y<<endl;
    }
};

int main(){
    test p1(5,10);
    p1.print();

    test p2(p1);
    p2.print();

    return 0;
}

사용자 삽입 이미지








c-b-r에 대해 배웠다면 무슨의미인지 눈에 확연히 들어올거다. 중요한건 레퍼런스에 의해 주소값이 복사된 객체의 맴버데이터를 생성자에서 대입하고 있는것이다. 이렇게 맴버데이터별 대입을 하면 이전 객체와 나중 객체가 같은 값을 갖게된다. 물론 주소는 다르겟지만;



잡설:컴파일러는 클래스 내에서 생성자또는 소멸자가 없을경우 디폴트 생성자와 소멸자를 자동으로 제공해준다. 그렇다면 복사 생성자도 마찬가질까?... ㅇㅅㅇ 마찬가지다 ㅋ

#include<iostream>

using std::cout;
using std::endl;

class test{
    int x;
    int y;

public:
    test(int _x , int _y){    //생성자.
        x = _x;
        y = _y;
    }

    void print(){
        cout<<"x = "<<x<<endl
            <<"y = "<<y<<endl;
    }
};

int main(){
    test p1(5,10);
    p1.print();

    test p2(p1);
    p2.print();

    return 0;
}
사용자 삽입 이미지

댓글을 달아 주세요