본문 바로가기

전자 공학/C언어 C++

[C++ 독학하기] 13. 복사 생성자

반응형

안녕하세요. 취업한 공대누나입니다.

오늘은 복사 생성자에 대해 알아보도록 하겠습니다.


1. 복사 생성자란?

C++에는 C언어와는 다르게 객체라는 것이 존재합니다.

객체에는 멤버 변수와 멤버 함수가 존재하지요.

Copy Constructor는 말 그대로 객체의 복사본을 생성할 때 호출되는 생성자입니다.

 

클래스를 작성할 때 복사 생성자를 생략하면 디폴트 생성자처럼 컴파일러가 알아서 만들어 넣어줍니다.

이걸 우리는 기본 복사 생성자라고 합니다.

객체간의 변수의 값을 복사해주며 호출시키는 객체의 선언과 동시에 초기화할 때 발생합니다.

다음 시간에 더 자세히 다루겠지만 기본적으로 얕은 복사를 제공합니다.

 

클래스 내에서 일반 생성자는 파라미터를 다르게 해서 여러개를 둘 수 있지만

복사 생성자는 파라미터를 자기 클래스 타입 참조 변수 하나만 가지며 때문에 하나의 복사 생성자만 존재할 수 있습니다.

 

복사 생성자의 형태는 아래와 같습니다.

상수로 선언된 참조자이며 type은 클래스(자기 자신)이 되는 것을 알 수 있습니다.

 클래스이름(const 클래스이름 &rhs)

rhs는 Right Hand Side의 약자입니다. 보통 이 이름을 많이 사용합니다.

const 예약어는 생략할 수도 있지만 일반적으로 붙여주는 것이 원칙입니다.

왜냐하면 원본의 값이 바뀌면 안되기 때문입니다.

인수는 참조자(&)로 전달을 하는데요. 참조자가 아니면 무한루프에 빠질 수 있습니다.

왜냐하면 참조가 아니라 그냥 rhs와 같게 되면 새로운 변수 선언으로 복사 생성자가 계속 호출되기 때문입니다.

 

복사 생성자는 객체 생성시 객체를 인자로 줄 경우

객체 생성시 객체를 대입할 경우 호출되게 됩니다.

예제로 한 번 보도록 하겠습니다.


2. 복사 생성자 예제

오른쪽 TEST test2(test1); 에 의해서 복사 생성자가 호출되게 됩니다.

여기서 test1을 원본으로 test2가 생성되는 것입니다.

 

 

다음 시간에는 얕은 복사와 깊은 복사에 대해 좀 더 다뤄보도록 하겠습니다.

반응형