- 1 -
객체지향 프로그래밍 실습 (7주차)
2018. 10. 17
학번: 이름:
[문제 1] 벡터 활용 실습: 다음 코드에 답하시오.
int main(void) {
vector<string> vec;
vec.push_back("MILK");
vec.push_back("BREAD");
vec.push_back("BUTTER");
for (auto e : vec) { cout << " " << e;
}
cout << endl;
return 0;
}
a. 위의 코드를 실행시키시오.
b. 위의 코드를 다음과 같이 벡터에 데이터를 삽입하고, 출력하는 부분을 함수로 작성하고, 실행시켜라.
getData(), display()를 main() 뒤에 작성하라.
int main(void) {
vector<string> vec;
getData(vec);
display(vec);
return 0;
}
c. 벡터에 포함된 데이터를 알파벳순서로 정렬하여 출력하고자 한다. 다음과 같이 sortData()를 작성하여 main()을 수정하고, 테스트하라. 여러분은 STL에서 제공하는 sort() 함수를 이용해야 한다.
int main(void) {
vector<string> vec;
getData(vec);
sortData(vec);
display(vec);
return 0;
}
d. 벡터에 포함된 데이터를 알파벳 역순으로 정렬하여 출력하도록, sortData()를 수정하고, 테스트하라.
- 2 -
[문제 2] 객체 동적 생성 실습: 다음 코드에서와 같이 객체를 동적으로 생성하고, 반환하라.
class Circle { int radius;
public:
Circle();
Circle(int r);
~Circle();
void setRadius(int r) { radius = r; }
double getArea() { return 3.14*radius*radius; } };Circle::Circle() {
radius = 1;
cout << "생성자 실행 radius = " << radius << endl;
}Circle::Circle(int r) { radius = r;
cout << "생성자 실행 radius = " << radius << endl;
}Circle::~Circle() {
cout << "소멸자 실행 radius = " << radius << endl;
}int main() {
Circle *p, *q;
Circle r;
p = new Circle;
q = new Circle(30); // 1) // 2)
cout << p->getArea() << endl << q->getArea() << endl;
delete p;
delete q;
}
a. 위의 코드가 1)까지 실행되었을 때, 생성된 객체, 포인터 변수, p, q의 상태를 각각 나타내라.
b. 첫 번째 생성된 Circle 객체의 반지름을 10으로 변경하는 문장을 2)의 위치에 작성하라.
c. 위 코드를 실행시키고, 그 결과를 작성하라. 그 이유를 주라.
d. 위의 코드에서 main() 함수가 다음을 수행하도록 수정하고, 테스트하라:
1) 사용자로부터 정수 반지름을 입력받고, Circle 객체를 동적 생성하고, 그 원의 면적을 구하여 출력하라.
그리고 객체를 삭제하라.
2) 사용자가 음수를 입력할 때까지 1)의 과정을 반복한다.
e. d)에서 동적 생성한 Circle 객체를 벡터에 저장하여 반환하는 getData()를 작성하고, 벡터에 포함된 Circle 객체를 면적이 작은 순서로 정렬하는 SortData()를 작성하고, 벡터에 포함된 각 원의 면적을 출력하는 display()함수를 작성하라. 위의 함수를 순서대로 호출하는 main()를 작성하고, 테스트하라.