ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 명품 C++ 10장 7번
    C++ 2018. 11. 17. 01:53

    7. 다음 프로그램은 컴파일 오류가 발생한다. 소스의 어디에서 왜 컴파일 오류가 발생하는가?


    #include <iostream>
    using namespace std;
    class Circle {
        int radius;
    public:
        Circle(int radius = 1) { this->radius = radius; }
        int getRadius() { return radius; }
    };
    template <class T>
    T bigger(T a, T b) { // 두 개의 매개 변수를 비교하여 큰 값을 리턴
        if (a > b) return a;
        else return b;
    }
    int main() {
        int a = 20, b = 50, c;
        c = bigger(a, b);
        cout << "20과 50중 큰 값은 " << c << endl;
        Circle waffle(10), pizza(20), y;
        y = bigger(waffle, pizza);
        cout << "waffle과 pizza 중 큰 것의 반지름은 " << y.getRadius() << endl;
    }


    Circle 가 T 로 대입된 후, 비교 연산을 할 때, 해당 하는 연산자가 없어서 컴파일 에러가 납니다. 따라서 Circle내에 연산자를 정의 해주면 실행됩니다.


    소스코드


    #include <iostream>
    using namespace std;
    class Circle {
        int radius;
    public:
        Circle(int radius = 1) { this->radius = radius; }
        int getRadius() { return radius; }
        bool operator >(Circle op2);
    };
    bool Circle::operator>(Circle op2) {
        if (this->radius > op2.radius) return true;
        else return false;
    }
    template <class T>
    T bigger(T a, T b) { // 두 개의 매개 변수를 비교하여 큰 값을 리턴
        if (a > b) return a;
        else return b;
    }
    int main() {
        int a = 20, b = 50, c;
        c = bigger(a, b);
        cout << "20과 50중 큰 값은 " << c << endl;
        Circle waffle(10), pizza(20), y;
        y = bigger(waffle, pizza);
        cout << "waffle과 pizza 중 큰 것의 반지름은 " << y.getRadius() << endl;
    }


    실행결과



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

    명품 C++ 10장 9번  (0) 2018.11.17
    명품 C++ 10장 8번  (0) 2018.11.17
    명품 C++ 10장 6번  (0) 2018.11.17
    명품 C++ 10장 5번  (0) 2018.11.17
    명품 C++ 10장 4번  (0) 2018.11.16

    댓글

© 2018 TISTORY. All rights reserved.