복사생성은 객체가 생성될 때 원본 객체를 복사하여 생성되는 경우에 사용된다.
복사생성자의 선언
class pokemon {
int id;
public:
pokemon(const pokemon& p); //복사 생성자 선언
};
복사생성의 매개변수는 하나이며, 자기 클래스에 대한 참조로 선언된다. 복사생성자는 클래스에 한개만 선언 할 수 있다.
복사생성자의 실행
class pokemon {
int id;
public:
pokemon(const pokemon& p);
};
pokemon::pokemon(const pokemon& p) { //복사 생성자 구현
this->id = p.id;
}
int main(){
pokemon pika;
pokemon pika2(pika); //pika2 에 pika의 값을 복사해서 생성
}
복사생성자가 없는 클래스에서 복사생성자를 호출하면, 컴파일러에서 디폴트 복사 생성자를 삽입해 준다. 이때 얕은 복사를 한다.