문제 :

문제 7을 푸는 다른 방법을 소개한다.

bigger() 함수의 다음 라인에서 > 연산자 때문에

1 if(a > b) return a;

T에 Circle과 같은 클래스 타입이 대입되면, 구체화가 실패하여 컴파일 오류가 발생한다.

이 문제를 해결하기 위해 다음과 같은 추상 클래스 Comparable을 제안한다.

1 2 3 4 5 6 class Comparable { public: virtual bool operator > (Comparable& op2) = 0; // 순수 가상 함수 virtual bool operator < (Comparable& op2) = 0; // 순수 가상 함수 virtual bool operator == (Comparable& op2) = 0; // 순수 가상 함수 };

Circle 클래스가 Comparable을 상속받아 순수 가상 함수를 모두 구현하면, 앞의 bigger() 템플릿 함수를 사용하는데 아무 문제가 없다.

Circle뿐 아니라, Comparable을 상속받은 모든 클래스를 bigger()에 사용할 수 있다.

Comparable을 상속받은 Circle 클래스를 완성하고 문제 7의 main()을 실행하여 테스트 하라.

2020/03/09 - [C++/명품 C++ programming] - 명품 C++ programming 실습 문제 10장 7번

[명품 C++ programming 실습 문제 10장 7번

문제 : 다음 프로그램은 컴파일 오류가 발생한다. 소스의 어디에서 왜 컴파일 오류가 발생하는가? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #include using namespace std; cl..

sobamemil.tistory.com](https://sobamemil.tistory.com/117)

실행 결과 :

목적 및 힌트 :

템플릿 함수 작성시 상속과 연산자 중복의 필요성 이해

코드 :

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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 #include  using namespace std; class Comparable { public: virtual bool operator > (Comparable& op2) = 0; // 순수 가상 함수 virtual bool operator < (Comparable& op2) = 0; // 순수 가상 함수 virtual bool operator == (Comparable& op2) = 0; // 순수 가상 함수 }; class Circle : public Comparable { int radius; public: Circle(int radius = 1) { this->radius = radius; } int getRadius() { return radius; } bool operator > (Comparable& op2) { Circle *c; c = (Circle*) &op2; if(this->radius > c->getRadius()) return true; return false; } bool operator < (Comparable& op2) { Circle *c; c = (Circle*) &op2; if(this->radius < c->getRadius()) return true; return false; } bool operator == (Comparable& op2) { Circle *c; c = (Circle*) &op2; if(this->radius == c->getRadius()) return true; 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; }

공유하기

게시글 관리

코딩은 내일부터 ;

저작자표시 (새창열림)

💻 개발 & CS > C++ 프로그래밍’ 카테고리의 다른 글

명품 C++ programming 실습 문제 10장 10번  (1) 2020.03.10
명품 C++ programming 실습 문제 10장 9번  (1) 2020.03.10
명품 C++ programming 실습 문제 10장 7번  (1) 2020.03.09
명품 C++ programming 실습 문제 10장 6번  (1) 2020.03.09
명품 C++ programming 실습 문제 10장 5번  (1) 2020.03.09