Notice
Recent Posts
Recent Comments
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Archives
Today
Total
관리 메뉴

SYDev

C++ Chapter 04-2 : 캡슐화(Encapsulation) 문제풀이 본문

Programming Lang/C++

C++ Chapter 04-2 : 캡슐화(Encapsulation) 문제풀이

시데브 2023. 7. 15. 19:35

문제

다음의 Point 클래스를 기반으로 하여(활용하여) 원을 의미하는 Circle 클래스를 정의하자.

 

class Point
{
private:
    int xpos, ypos;
public:
    void Init(int x, int y)
    {
        xpos = x;
        ypos = y;
    }
    void ShowPointInfo() const
    {
        cout<<"["<<xpos<<", "<<ypos<<"]"<<endl;
    }
};

 Circle 객체에는 좌표상의 위치정보(원의 중심좌표)와 반지름의 길이 정보를 저장 및 출력할 수 있어야 한다.

그리고 여러분이 정의한 Circle 클래스를 기반으로 Ring 클래스도 정의하자.

 링은 두개의 원으로 표현 가능하므로(바깥쪽 원과 안쪽 원), 두 개의 Circle 객체를 기반으로 정의가 가능하다.

다음 main 함수를 기반으로 실행시키자.

int main(void)
{
    Ring ring;
    ring.Init(1, 1, 4, 2, 2, 9);
    ring.ShowRingInfo();
    
    return 0;
}

 

실행의 예

Inner Circle Info...
radius : 4
[1, 1]
Outter Circle Info...
radius : 9
[2, 2]

문제풀이

#include <iostream>
using namespace std;

class Point
{
private:
    int xpos, ypos;
public:
    void Init(int x, int y)
    {
        xpos = x;
        ypos = y;
    }
    int GetX() const
    {
        return xpos;
    }
    int GetY() const
    {
        return ypos;
    }
    void ShowPointInfo() const
    {
        cout<<"["<<xpos<<", "<<ypos<<"]"<<endl;
    }
};

class Circle
{
private:
    Point cirmid;
    int rad;
public:
    void Init(const Point &pos, const int &r)
    {
        cirmid = pos;
        rad = r;
    }
    void ShowPointInfo() const
    {
        cout<<"radius : "<<rad<<endl;
        cirmid.ShowPointInfo();
    }    
};

class Ring
{
private: 
    Point innerPos;
    Point outterPos;
    Circle innerCir;
    Circle outterCir;
public:
    void Init(const int &x1, const int &y1,const int &rad1, const int &x2, const int &y2,const int &rad2 )
    {
        innerPos.Init(x1,y1);
        outterPos.Init(x2,y2);
        innerCir.Init(innerPos,rad1);
        outterCir.Init(outterPos,rad2);
    }
    void ShowRingInfo() const
    {
        cout<<"Inner Circle Info..."<<endl;
        innerCir.ShowPointInfo();
        cout<<"Outter Circle Info..."<<endl;
        outterCir.ShowPointInfo();
    }
};

int main(void)
{
    Ring ring;
    ring.Init(1, 1, 4, 2, 2, 9);
    ring.ShowRingInfo();
    
    return 0;
}

 


출처 : 윤성우, <윤성우의 열혈 C++ 프로그래밍>, 오렌지미디어, 2010.05.12