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 해주어야 합니다.
'명품 C++ programming' 카테고리의 다른 글
명품 C++ programming 실습문제 4장 10번 (0) | 2019.04.07 |
---|---|
명품 C++ programming 실습문제 4장 9번 (0) | 2019.04.07 |
명품 C++ programming 실습문제 4장 7번 (0) | 2019.04.06 |
명품 C++ programming 실습문제 4장 6번 (0) | 2019.04.06 |
명품 C++ programming 실습문제 4장 5번 (0) | 2019.04.06 |