2020-10-03 고급프로그래밍

Hyeonu_Chun·2021년 6월 22일
0

Absolute C++ 6th ed./Savitch Chap.6 Programming Project. 2

  1. 문제 기술
    필자는 반지름을 오브젝트로 갖고 이 반지름을 제어하고 이를 통해 원의 넓이, 지름, 원주 그리고 반지름을 보여주는 함수들을 가진 클래스의 구현을 요한다.

  2. 설계 계획
    클래스 외에서 직접적으로 제어할 수 없는 데이터 멤버를 지정하고, 디폴트 생성자를 수동생성한다. 변수를 간접적으로 제어하기 위해 문제에서 요하는 각각의 기능을 가진 SetRadius, Calculate, ReturnRadius 함수를 만든다. 각각의 함수를 정의하고 메인함수 내에서 원하는 반지름을 double 형으로 받으면 그에 따라 반지름을 세팅하고 원의 넓이, 지름 그리고 원주를 계산하여 보여준다. 마지막으로 입력 받은 반지름을 보여준다.

  3. 데이터 처리 과정
    먼저 Circle class type의 Circle이라는 데이터 멤버를 선언한다. 따라서 Circle class의 디폴트 생성자가 호출되어 데이터 멤버를 초기화 시키고, 객체 생성을 완료한다. 다음으로 원하는 반지름을 입력 받기 위해 r이라는 변수를 선언하고, 입출력 함수를 통해 반지름을 입력 받는다. 클래스를 테스트하기 위해 입력 받은 반지름을 멤버 함수를 통해 전달하여 입력한다. 전달받은 반지름으로 원의 넓이, 지름 그리고 원주를 계산하고 출력한다. 입력 받은 반지름 값이 데이터 멤버에 입력되었는지 확인하는 리턴함수를 통해 출력한다. 마지막으로 소멸자를 통해 객체 소멸을 완료시킨다.

  4. 실행 결과 및 분석

#include <iostream>
#include <math.h>
#define PI 3.14
using namespace std;

class Circle {
private:
	double radius;
public:
	Circle();
	~Circle() { /* cout << "Call Destructor..." << endl; */ }
	void SetRadius(double r);
	void Calculate();
	double ReturnRadius();
};

Circle::Circle() {
	this->radius = 0;
	/* cout << "Call Constructor..." << end/; */
}

void Circle::SetRadius(double r) {
	this->radius = r;
}

void Circle::Calculate() {
	cout << "The area of the circle is " << fixed << 2 * PI * pow(this->radius, 2) << endl;
	cout << "The diameter of the circle is " << 2 * this->radius  << endl;
	cout << "The circumference of the circle is " << 2 * PI * this->radius << endl;
}

double Circle::ReturnRadius() {
	return this->radius;
}

int main() {
	Circle Circle;
	double r;

	cout << "Please enter the radius you want to change. ";
	cin >> r;

	Circle.SetRadius(r);
	Circle.Calculate();

	cout << "The radius of the circle is " << Circle.ReturnRadius() << endl;
}


금일 날짜를 반지름으로써 입력하여 원의 넓이, 지름, 원주 그리고 반지름을 정상적으로 출력한다. 강제형변환 횟수를 줄이기 위해 데이터를 double 형으로 입력 받아 제곱 함수의 데이터 리턴값과의 계산에도 문제가 생기지 않았다. 본 클래스에는 This 포인터를 쓸 이유는 없었지만 개인적으로 쓰는 것이 입출력 되는 데이터들의 구분이 되어 사용하였다. 생성자의 개념이 미숙하여 생성자와 소멸자의 수행 위치를 확인하기 위한 테스트를 진행하였다.

profile
Stay hungry, stay foolish

0개의 댓글