반응형
4.9> 다음은 이름과 반지름을 속성으로 가진 Circle 클래스와 이들을 배열로 관리하는 CircleManager 클래스이다. 키보드에서 원의 개수를 입력받고, 그 개수만큼 원의 이름과 반지름을 입력받고, 다음과 같이 실행되도록 main() 함수를 작성하라. Circle, CircleManager 클래스도 완성하라.
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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | #include <iostream> #include <string> using namespace std; class Circle{ private: int radius; string name; public: void setCircle(string name, int radius){ //멤버 name과 radius를 set해줌. this->name=name; this->radius=radius; } double getArea(){return radius*radius*3.14;} //원의 면적 리턴 string getName(){return name;} //원의 이름 리턴 }; class CircleManager{ private: Circle *p; //Circle형 포인터 p int size; public: CircleManager(int size){ //컨스트럭터 this->size=size; p=new Circle[size]; //size크기만큼의 Circle형 동적 객체 배열 생성 int radius; string name; for(int i=0;i<size;i++){ cin.ignore(100,'\n'); //cin은 개행문자를 버퍼에 남겨놓기 때문에 버퍼에서 비워줘야 한다. //그렇지 않으면 다음 루프의 getline이 개행문자 + 입력한 문자열을 받아버린다. cout<<"원 "<<i+1<<"의 이름과 반지름 >>"; getline(cin,name,' '); // space를 delimeter로 설정하여 이름을 받는다. cin>>radius; //radius는 cin으로 받는다. p[i].setCircle(name,radius); //Circle을 set 해줌. } cin.ignore(); //마지막 개행문자 버퍼에서 제거 } ~CircleManager(){delete []p;} //동적 Circle 객체 배열 해당 메모리 힙으로 반환 void searchByName(){ string cmp; cout<<"검색하고자 하는 원의 이름>> "; getline(cin,cmp,'\n'); //cmp를 getline으로 개행문자 나올때까지 받는다. for(int i=0;i<(this->size);i++){ if(cmp==(p[i].getName())) //cmp와 i번째 동적circle의 name이 같으면 {cout<<"도넛의 면적은 "<<p[i].getArea()<<endl; //i번째 동적circle의 area 반환 break;} } } void searchByArea(){ int area; cout<<"최소 면적을 정수로 입력하세요>> "; cin>>area; //area를 받는다. cout<<area<<"보다 큰 원을 검색합니다."<<endl; for(int i=0;i<(this->size);i++){ //동적 객체 배열 전부 순회하여 area보다 if(p[i].getArea()>area) //p번째 circle 객체의 넓이가 크면 출력 cout<<p[i].getName()<<"의 면적은 "<<p[i].getArea()<<", "; } cout<<endl; //개행 출력 } }; int main(void){ int size; cout<<"원의 개수 >> " ; cin>>size; //원의 개수 정함 CircleManager m(size); //CircleManager객체 생성 m.searchByName(); //Name으로 찾기 m.searchByArea(); //특정 Area 초과인것 찾기 return 0; } | cs |
반응형
'컴퓨터 & 프로그래밍 & 전자공학 > C++' 카테고리의 다른 글
float와 double (0) | 2017.11.05 |
---|---|
히스토그램 (0) | 2017.11.03 |
Person, Family 클래스 (0) | 2017.11.03 |
원의 개수와 반지름 (0) | 2017.11.03 |
문자열 문자 랜덤 수정 (0) | 2017.11.03 |