-
명품 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