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