본문 바로가기

C++ 언어/연습문제

C++ 언어 연습문제28

[문제]

아래의 코드를 실행시키면 다음의 실행결과가 나타나면서 에러가 발생한다.

이름: 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