ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 명품 C++ 8장 1번 2번
    C++ 2018. 11. 4. 17:33

    문제 1~에 적용되는 원을 추상화한 Circle 클래스가 있다.


    class Circle {
        int radius;
    public:
        Circle(int radius = 0) { this->radius = radius; }
        int getRadius() { return radius; }
        void setRadius(int radius) { this->radius = radius; }
        double getArea() { return 3.14 *radius*radius; }
    };


    1. 다음 코드가 실행되도록 Circle을 상속받은 NamedCircle 클래스를 작성하고 전체 프로그램을 완성하라.


    소스코드


    #include <iostream>
    #include <string>
    using namespace std;
    class Circle {
        int radius;
    public:
        Circle(int radius = 0) { this->radius = radius; }
        int getRadius() { return radius; }
        void setRadius(int radius) { this->radius = radius; }
        double getArea() { return 3.14 *radius*radius; }
    };
    class NamedCircle : public Circle {
        string name;
    public:
        NamedCircle(int r, string name) : Circle(r) { this->name = name; }
        void show() { cout << "반지름이 " << getRadius() << "인 " << name<<endl; }
    };
    int main() {
        NamedCircle waffle(3, "waffle"); // 반지름이 3이고 이름이 waffle인 원
        waffle.show();
    }


    실행결과



    반지름은 Circle 클래스의 멤버이기 때문에 NamedCircle 생성자에서 매개변수로 Circle 생성자에게 넘겨주어야 합니다.

    또한, 반지름은 Circle 클래스의 private 멤버이기때문에 파생 클래스에서 직접 접근이 불가능합니다. 따라서 getRadius() 함수를 통해 반지름 값을 리턴받아 출력합니다.


    2. 다음과 같이 배열을 선언하여 다음 실행 결과가 나오도록 Circle을 상속받은 NamedCircle 클래스와 Main() 함수 등 필요한 함수를 작성하라.


    소스코드


    #include <iostream>
    #include <string>
    using namespace std;
    class Circle {
        int radius;
    public:
        Circle(int radius = 0) { this->radius = radius; }
        int getRadius() { return radius; }
        void setRadius(int radius) { this->radius = radius; }
        double getArea() { return 3.14 *radius*radius; }
    };
    class NamedCircle : public Circle {
        string name;
    public:
        NamedCircle() : Circle(0) { name = ""; }
        NamedCircle(int r, string name) : Circle(r) { this->name = name; }
        string getName() { return name; }
        void setName(string name) { this->name = name; }
    };
    int main() {
        NamedCircle pizza[5];
        string name;
        cout << "5 개의 정수 반지름과 원의 이름을 입력하세요" << endl;
        for (int i = 0; i < 5; ++i) {
            cout << i + 1 << ">> ";
            int n;
            cin >> n >> name;
            pizza[i].setRadius(n);
            pizza[i].setName(name);
        }
        double max = pizza[0].getArea();
        for (int i = 1; i < 5; ++i) {
            if (max < pizza[i].getArea()) {
                max = pizza[i].getArea();
                name = pizza[i].getName();
            }
        }
        cout << "가장 면적이 큰 피자는 " << name << "입니다" << endl;
    }


    실행결과



    5개의 피자중에 가장 면적이 넓은 피자의 이름을 출력하는 프로그램입니다.

    5개의 피자의 면적과 이름을 입력받은 후, 면적이 가장 큰 피자의 이름을 설정하고 출력합니다.

    객체 배열을 생성할 때는 기본생성자를 호출 하기 때문에 NamedCircle 클래스에 기본생성자를 추가해주어야합니다. 근데, NamedCircle 클래스는 Circle 를 상속 받고 반지름은 Circle 의 멤버이기 때문에 Circle의 생성자를 호출 해야합니다.  이 문제에서는 디폴트 매개변수가 있기때문에 굳이 호출 할 필요는 없습니다.

    'C++' 카테고리의 다른 글

    명품 C++ 8장 5번 6번  (0) 2018.11.04
    명품 C++ 8장 3번 4번  (0) 2018.11.04
    명품 C++ 7장 Open Challenge  (0) 2018.11.03
    명품 C++ 7장 12번  (0) 2018.11.03
    명품 C++ 7장 11번  (0) 2018.11.03

    댓글

© 2018 TISTORY. All rights reserved.