1. cricle 클래스에 접근자와 설정자, 원의 면적을 계산하는 getArea()와 원주를 계산하는 getPerimeter()를 추가하여 보자. 기타 print()와 같은 필요한 멤버 함수도 추가한다. const를 추가 할 수 잇으면 최대한 추가하라.
2. 필요한 생성자를 추가하여 보자.
3. 1위치에 동적으로 객체를 생성하여 보자. 반지름을 5.0으로 설정하는 새성자를 호출한다.
4. circle 클래스의 복사생성자를 작성하여 보자. 복사 생성자가 호출되는 문장을 작성하여 보자.
5. p를 통하여 getArea()를 호출하여 보자
6. circle 객체 두개를 받아서 같은 반지름인지를 체크하는 일반 함수 is_equal()을 작성하여 보자. 다음과 같은 함수 원형을 가정한다.
      bool is_equal(circle c1, circle c2);
7. 함수 is_equal()을 약간 수정하여 보자. 이번에는 함수의 매개 변수를 레퍼런스로 선언하여 보자. 수정되어야 하는 코드가 있는가? 4와의 차이점은 무엇일까? 실행속도는 어떤것이 빠를까? 위험성은 없는가?
       bool is_equal(circle & c1, circle & c2);

#include <iostream>
#include <string>

using namespace std;

class Circle
{
 double radius;
 const double PI;
public:

 Circle() : PI(3.14) // 기본생성자, default constructor
 {
  radius  = 0;
 }
 Circle(double radius) : PI(3.14)
 {
  this->radius = radius;
 }
 Circle(Circle& c) : PI(c.PI) // 얕은복사
 {
  radius = c.radius;
 }
 double getArea() const // 원넓이
 {
  return radius * radius * PI;
 }
 double getPerimeter() const // 원둘레
 {
  return 2 * PI * radius;
 }
 void print() const
 {
  cout << " 반지름 : " << radius << endl;
 }

};

void main()
{
 Circle *p = new Circle(5.0); // new를 통해 동적할당(힙공간에 주소저장)
 Circle c1(*p);
 cout << " 원 넓이 : " << p->getArea() << endl;  //1번방법
 cout << " 원 둘레 : " << p->getPerimeter() << endl; //1번방법
 ////////////////////////////////////////////////////////////////////
 cout << " 원 넓이 : " << (*p).getArea() << endl; //2번방법
 cout << " 원 둘레 : " << (*p).getPerimeter() << endl;//2번방법
 ////////////////////////////////////////////////////////////////////
 c1.print();
}

 

+ Recent posts