1. 문제
9. 다음은 이름과 반지름을 속성으로 가진 Circle 클래스와 이들을 배열로 관리하는 CurcleManager 클래스이다.
키보드에서 원의 개수를 입력받고, 그 개수만큼 원의 이름과 반지름을 입력받고, 다음과 같이 실해되도록 main() 함수를 작성하라. Circle, CircleManager 클래스도 완성하라.
2. 결과
3. 코드
#include <iostream>
#include <string>
using namespace std;
class Circle {
int radius;
string name;
public:
void setCircle( string name, int radius){ this->name=name; this->radius=radius; }
double getArea(){ return radius * radius * 3.14;}
string getName(){ return name; }
};
class CircleManager {
Circle *p;
int size;
public :
CircleManager(){;}
CircleManager(int size);
~CircleManager(){ delete [] p;}
void searchByName();
void searchByArea();
};
CircleManager::CircleManager(int size) {
string n,r;
p = new Circle[size];
this->size = size;
for(int i=0; i<size; i++) {
cout << "원 " << i+1 << "의 이름과 반지름 >> ";
cin >> n >> r;
p[i].setCircle( n, stoi(r) );
}
fflush(stdin);
}
void CircleManager::searchByName() {
string cir; int n;
cout << "검색하고자 하는 원의 이름 >> ";
getline( cin, cir);
for(int i=0; i<size; i++)
if( p[i].getName() == cir ) n = i;
cout << p[n].getName() << "의 면적은 " << p[n].getArea() << endl;
}
void CircleManager::searchByArea() {
int n;
cout << "최소 면적을 정수로 입력하세요 >> ";
cin >> n;
cout << n << "보다 큰 원을 검색합니다." << endl;
for(int i=0; i<size; i++) {
if( p[i].getArea() > n )
cout << p[i].getName() << "의 면적은 " << p[i].getArea() << ",";
}
cout << endl;
}
int main() {
int n;
cout << "원의 개수 >> ";
cin >> n;
CircleManager cm(n);
cm.searchByName();
cm.searchByArea();
}
4. 설명
Circle 클래스의 있는 함수들을 구현 합니다.
CircleManager 클래스는 매개변수가 없는 생성자와 int형 매개변수 하나를 입력받는 생성자를 생성하여서 입력받은 값의 크기만큼 Circle 배열 변수를 동적으로 생성합니다.
여기 생성자에서 각 원의 이름과 반지름을 입력 받은 후 fflush(stdin);을 하는 이유는 cin으로 입력받아서 입력 버퍼에 '\n가 남은 상태에서 다음 원의 이름을 검색 받는데 입력 버퍼에 '\n' 가 남아있어서 오류가 납니다.
그래서 fflush(stdin);으로 입력버퍼를 비워줍니다. 이 방법은 C에서 사용하는 방법 입니다.
그 외 이름을 입력받고 면적을 출력해주는 searchByName()함수와
정수 하나를 입력 받은 후 그 정수보다 면적이 큰 원들의 이름과 면적을 출력하는 searchByArea() 함수를 구현하면 됩니다.
'명품 C++ programming' 카테고리의 다른 글
명품 C++ programming 실습문제 4장 11번 (0) | 2019.04.07 |
---|---|
명품 C++ programming 실습문제 4장 10번 (0) | 2019.04.07 |
명품 C++ programming 실습문제 4장 8번 (0) | 2019.04.06 |
명품 C++ programming 실습문제 4장 7번 (0) | 2019.04.06 |
명품 C++ programming 실습문제 4장 6번 (0) | 2019.04.06 |