728x90
class SoSimple
{
private:
int num1;
int num2;
public:
SoSImple(int n1, int n2): num1(n1), num2(n2)
{ }
void ShowSimpleData()
{
cout << num1 << endl;
cout << num2 << endl;
}
};
int main(void)
{
SoSimple sim1(15, 20);
SoSimple sim2 = sim1;
sim2.ShowSimpleData();
return 0;
}
이 상황에서 15, 20이 출력됨. 이는 생성자를 복사할 수 있다는 것~
SoSImple sim2 = sim1; 이게 되네.
이 부분이 복사생성자.
1.자동으로 삽입이 되는 디폴트 복사 생성자
디폴트 복사 생성자: 복사 생성자를 정의하지 않으면 자동으로 삽입됨.
하지만 반드시 복사생성자를 정의해야 하는 경우도 있음!(차후 설명)
2.변환에 의한 초기화! 키워드 explicit로 막을 수 있다!
explicit SoSimple(const SoSimple ©)
:num1(copy.num1), num2(copy.num2)
{
//empty!!
}
더이상 묵시적 반환이 발생하지 않아서 대입연산자를 이용한 객체의 생성 및 초기화가 불가능해짐.
복사생성자의 매개변수는 반드시 참조형이어야 함!
728x90
'LANG > C++' 카테고리의 다른 글
[C++]05-3.복사 생성자의 호출시점 (0) | 2023.05.13 |
---|---|
[C++]05-2.'깊은 복사'와 '얕은 복사' (0) | 2023.05.13 |
[C++]04-4.클래스와 배열 그리고 포인터 (0) | 2023.05.12 |
[C++] 04-3.생성자(Constructor)와 소멸자(Destructor) (0) | 2023.05.12 |
[C++]04-2.캡슐화(Encapsulation) (0) | 2023.05.12 |