1. 문제

 

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

 

아래 결과와 같이 출력되도록 프로그램을 수정하라.

 

2. 결과

 

 

3. 코드

#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;
}
Circle bigger(Circle a, Circle b) {
	if (a.getRadius() > b.getRadius()) 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;
}

 

4. 설명

 

처음 20과 50을 비교할 때는 잘 실행되지만, 그 다음 Circlr 클래스 변수를 비교할려면 오류가 발생한다.

 

그 이유는 클래스 변수를 비교할 수는 없기 때문이다. 그러므로 클래스 변수 안의 있는 비교할 수 있는 멤버 변수 radius를 비교하도록 따로 구현을 해주어야 한다.

 

+ Recent posts