C++
C++ 연습문제 7.9
wooob
2021. 10. 19. 18:38
728x90
정사각형과 원을 동시에 표현할 수 있는 Shape 클래스를 만들어 보자. Shape 클래스는 멤버 변수로 정사각형 또는 원을 의미하는 타입 변수(int type_)를 가지고 있으며, double형 변수 하나(double len_)를 통해 정사각형의 경우 한 변의 길이를 나타내고 원의 경우 반지름을 나타내도록 하라. 생성자를 통해 타입과 한 변의 길이(반지름)를 지정할 수 있으며 멤버 함수로는 각 도형의 면적을 계산하는 GetArea 함수가 있다.
이때 도형의 타입 값으로 정사각형은 1, 원은 2로 가정하라. 원의 면적 계산을 위한 PI 값은 const 멤버 변수로 선언하라. 그리고 현재 생성된 객체들 중 각 타입의 도형이 몇 개인지 알 수 있도록 static 멤버 변수를 사용해 보라.
다음 main 함수와 실행 결과를 참고하라.
main 함수 :
int main() {
Shape shape1(1, 5);
Shape shape2(2, 5);
Shape* p_rect = new Shape[3];
cout << "사각형 개수 : " << Shape::GetRectCount() << endl;
cout << "원 개수 : " << Shape::GetCircleCount() << endl;
cout << "shape2의 면적 : " << shape1.GetArea() << endl;
delete[] p_rect;
cout << "사각형 개수 : " << Shape::GetRectCount() << endl;
cout << "원 개수 : " << Shape::GetCircleCount() << endl;
cout << "shape2의 면적 : " << shape2.GetArea() << endl;
return 0;
}
· 실행 결과 사각형 개수 : 4 원 개수 : 1 shape1의 면적 : 25 사각형 개수 : 1 원 개수 : 1 shape2의 면적 : 78.5 |
내 코드(Shape.h) :
#include <iostream>
using namespace std;
class Shape {
private:
int type_;
double len_;
const double PI;
static int reccnt;
static int circnt;
public:
Shape(int type = 1, double len = 1) : type_(type), len_(len), PI(3.14) {
if (type_ == 1)
reccnt++;
else
circnt++;
}
~Shape() {
if (type_ == 1)
reccnt--;
else
circnt--;
}
double GetArea() const {
if (type_ == 1)
return (len_ * len_);
else
return (PI * len_ * len_);
}
static int GetRectCount() {
return reccnt;
}
static int GetCircleCount() {
return circnt;
}
};
int Shape::reccnt = 0;
int Shape::circnt = 0;
main.cpp :
#include "Shape.h"
using namespace std;
int main() {
Shape shape1(1, 5);
Shape shape2(2, 5);
Shape* p_rect = new Shape[3];
cout << "사각형 개수 : " << Shape::GetRectCount() << endl;
cout << "원 개수 : " << Shape::GetCircleCount() << endl;
cout << "shape2의 면적 : " << shape1.GetArea() << endl;
delete[] p_rect;
cout << "사각형 개수 : " << Shape::GetRectCount() << endl;
cout << "원 개수 : " << Shape::GetCircleCount() << endl;
cout << "shape2의 면적 : " << shape2.GetArea() << endl;
return 0;
}
728x90