1. 문제

 

8. 다음에서 Person은 사람을, Family는 가족을 추상화한 클래스로서 완성되지 않은 클래스이다.

 

다음 main()이 작동하도록 Person과 Family 클래스에 필요한 멤버들을 추가하고 코드를 완성하라.

 

 

2. 결과

 

 

 

3. 코드

 

#include <iostream>
#include <string>
using namespace std;

class Person {
	string name;
public :
	Person(){;}
	Person( string name) { this->name = name; }
	string getName() { return name; }
	void setname(string name) { this->name = name; }
};

class Family {
	Person *p;
	int size;
	string name;
public : 
	Family( string name, int size) { 
		p = new Person[size]; 
		this->size = size; 
		this->name =name; 
	}
	void setName(int n, string name) { p[n].setname( name ) ;}
	void show();
	~Family(){ delete [] p; }
};
void Family::show() {
	cout << name << "가족은 다음과 같이 " << size << "명 입니다." << endl;
	for(int i=0; i<size; i++)
		cout << p[i].getName() << "\t";
	cout << endl;
}

int main() {
	Family *simpson = new Family("Simpson", 3);
	simpson->setName(0, "Mr. Simpson");
	simpson->setName(1, "Mrs. Simpson");
	simpson->setName(2, "Bart Simpson");
	simpson->show();
	delete simpson;
}

 

 

4. 설명

 

main()함수에서 Family함수를 동적으로 생성하면 Family 생성자에서 성을 입력받고, 또한 입력받은 크기만큼 Person 배열을 동적으로 생성합니다.

 

Family클래스에서 Person 배열 변수를 동적 생성하므로 Person함수의 Person() 기본 생성자를 선언하셔야 합니다.

=>이미 매개변수가 있는 Person() 생성자 때문에 디폴트 생성자 생성이 안됩니다.

 

그 후 setName() 멤버함수를 불러서 가족 구성원의 이름들을 저장 합니다.

=>여기서 동적으로 변수를 생성하였으므로 함수에 접근하기 위해서는 "->"를 사용합니다.

 

Family클래스 소멸자에서는 클래스 내에서 동적으로 생성하였던 Person 배열 변수를 delete 해주어야 합니다.

 

main()함수에서는 동적으로 생성한 Family 변수를 delete 해주어야 합니다.

+ Recent posts