[문제]
아래의 코드를 실행시키면 다음의 실행결과가 나타나면서 에러가 발생한다.
이름: Lee dong woo
나이: 29
이름: Lee dong woo
나이: 29
called destructor!
복사 생성자를 만들어서 에러를 없애고 아래의 실행결과가 나오도록 하라.
그리고 동적할당된 구조를 그림으로 그려라.
#include <iostream>
#include<cstring>
using namespace std;
class Person
{
private:
char* name;
int age;
public:
Person(const char* myname, int myage)
{
int len = strlen(myname) + 1;
name = new char[len];
strcpy(name, myname);
age = myage;
}
void ShowPersonInfo() const
{
cout << "이름: " << name << endl;
cout << "나이: " << age << endl;
}
~Person()
{
delete[]name;
cout << "called destructor!" << endl;
}
};
int main(void)
{
Person man1("Lee dong woo", 29);
Person man2 = man1;
man1.ShowPersonInfo();
man2.ShowPersonInfo();
return 0;
}
[실행결과]
[코드]
#include <iostream>
#include<cstring>
using namespace std;
class Person
{
private:
char* name;
int age;
public:
Person(const char* myname, int myage)
{
int len = strlen(myname) + 1;
name = new char[len];
strcpy(name, myname);
age = myage;
}
Person(const Person& copy) :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(void)
{
Person man1("Lee dong woo", 29);
Person man2 = man1;
man1.ShowPersonInfo();
man2.ShowPersonInfo();
return 0;
}
<참고>
윤성우의 열혈 C++ 프로그래밍
'C++ 언어 > 연습문제' 카테고리의 다른 글
C++언어 연습문제30 (0) | 2022.11.11 |
---|---|
C++ 언어 연습문제29 (0) | 2022.11.10 |
C++ 언어 연습문제27 (0) | 2022.11.01 |
C++ 언어 연습문제26 (0) | 2022.10.31 |
C++ 언어 연습문제25 (0) | 2022.10.25 |