반응형
4.8> 다음에서 Person은 사람을, Family는 가족을 추상화한 클래스로서 완성되지 않은 클래스이다. 다음 main()이 작동하도록 Person과 Family 클래스에 필요한 멤버들을 추가하고 코드를 완성하라.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #include <iostream> #include <string> using namespace std; class Person{ //Person 클래스 private: string name; public: Person(string name){this->name=name;} //객체멤버 name을 매개변수 name으로 초기화 Person(){} //디폴트 생성자 string getName(){return name;} // 멤버변수 name 리턴 void setName(string name){this->name=name;} //멤버변수 name set함수 }; class Family{ //Family 클래스 private: Person *p; //Person형 포인터 p int size; //int형 변수 size string Fname; //string 형 객체 Fname public: Family(string name, int size){ p=new Person[size]; //size 크기만큼 동적 Person 객체 배열 생성 setFname(name); //Fname을 name으로 초기화 this->size=size; //멤버변수 size를 매개변수 size로 초기화 } string getFname(){return Fname;} //Fname 리턴 int getSize(){return size;} //size 리턴 void setFname(string Fname){this->Fname=Fname;} //멤버변수 Fname을 매개변수 Fname으로 셋 void setName(int num, string name){ p[num].setName(name); //num에 해당하는 인덱스에 존재하는 동적 person 객체 배열 원소의 name 셋 } void show(){ cout<<getFname()<<"가족은 다음과 같이 "<<getSize()<<"명 입니다."<<endl; //size 리턴받아 출력 for(int i=0;i<size;i++){ //i가 0에서부터 size보다 작을때까지 cout<<p[i].getName()<<"\t"; //동적 person 객체 배열 원소에서 getName멤버 함수 호출하여 출력후 탭문자 출력 } cout<<endl; // 한줄 내리기 } ~Family(){delete []p;} //소멸자는 동적person배열에 할당된 메모리를 힙에 반납한다. }; int main(void){ Family *simpson = new Family("Simpson", 3); //Fname "Simpson", size 3으로 초기화된 Family형 동적 객체, 그걸 가리키는 포인터 simpson simpson->setName(0, "Mr. Simpson"); //simpson이가리키는 객체 안에서원소3개의 person형 동적 객체 배열이 생성되었고 그중 0번 원소 초기화 simpson->setName(1, "Mrs. Simpson"); //1번 원소 초기화 simpson->setName(2, "Bart Simpson"); //2번 원소 초기화 simpson->show(); //출력 함수 delete simpson; //동적 메모리 힙으로 반환 } | cs |
반응형
'컴퓨터 & 프로그래밍 & 전자공학 > C++' 카테고리의 다른 글
히스토그램 (0) | 2017.11.03 |
---|---|
Circle, CircleManager 클래스 (0) | 2017.11.03 |
원의 개수와 반지름 (0) | 2017.11.03 |
문자열 문자 랜덤 수정 (0) | 2017.11.03 |
변수와 포인터와 레퍼런스 (0) | 2017.10.27 |