-
class SoSimple
{
private:
int num1;
int num2;
public:
SoSimple(int n1, int n2)
: num1(n1), num2(n2)
{
cout<<"생성자 호출"<<endl;
}
SoSimple(const SoSimple ©)
: num1(copy.num1), num2(copy.num2)
{
cout<<"복사 생성자 호출"<<endl;
}
// explicit SoSimple(const SoSimple ©) // 키워드 explicit으로 묵시적 형 변환을 막을 수 있다.
// : num1(copy.num1), num2(copy.num2)
// {
// cout<<"복사 생성자 호출"<<endl;
// }
void ShowSimpleData()
{
cout<<num1<<endl;
cout<<num2<<endl;
}
};
int main()
{
SoSimple sim1(15, 20);
SoSimple sim2 = sim1; // SoSimple sim2(sim1); 으로 묵시적 형 변환.
sim2.ShowSimpleData();
return 0;
}
깊은 복사 생성자
#include <stdio.h>
#include <iostream>
#include <cstring>
using namespace std;
class Person
{
private:
char *name;
int age;
public:
Person(char *myname, int myage)
{
int len = strlen(myname)+1;
name=new char[len];
strcpy(name, myname);
age=myage;
}
Person(const Person ©)
: age(copy.age)
{
name = new char[strlen(copy.name)+1];
strcpy(name, copy.name);
}
void ShowPersonInfo() const
{
cout<<"이름: "<<name<<endl;
cout<<"나이: "<<age<<endl;
}
~Person()
{
delete []name;
cout<<"called destructor!"<<endl;
}
};
int main()
{
Person man1("Lee dong wood", 29);
Person man2=man1;
man1.ShowPersonInfo();
man2.ShowPersonInfo();
return 0;
}
728x90댓글