맞는데 왜 틀릴까..?

C++

C++ 실습 문제 17 (virtual function, function overriding)

안도일 2022. 5. 20. 14:04

사각형에 내접하는 도형을 표현하기 위한 Shape클래스가 다음과 같이 주어진다.

 

 

1. 위의 Shape 클래스를 상속받아 타원을 표현하는 Oval, 사각형을 표현하는 Rect, 삼각형을 표현하는 Triangular 클래스를 작성하라. main()을 작성하고 실행하면 다음과 같다.

 

메인 함수

 

Shape 클래스

 

Oval 클래스 선언부
Oval 클래스 구현부

 

Rect 클래스 선언부
Rect 클래스 구현부

 

Triangular 클래스 선언부
Triangular 클래스 구현부

 

상속받은 클래스에서 매개변수를 가진 생성자를 선언할 때 아래와 같이 명시적으로 기본 클래스의 생성자를 선택해야 한다.

Rect(string n, int w, int h) : Shape(n,w,h){};  

 

 

 

2. 1번 문제에 주어진 Shape 클래스를 추상 클래스로 만들고 다시 작성하라.

Shape 클래스

추상 클래스 : 최소한 하나의 순수 가상 함수를 가진 클래스

추상 클래스는 온전한 클래스가 아니므로 객체를 생성할 수 없지만 포인터는 선언 가능하다.

 

추상 클래스를 상속 받은 파생 클래스를 단순 상속하면 파생 클래스도 추상 클래스가 된다.

하지만 추상 클래스를 상속 받아 순수 가상 함수를 오버라이딩 한다면 추상 클래스가 아니다.

 

따라서 virtual double getArea()를 오버라이딩 한 Oval, Rect, Triangular은 객체를 생성할 수 있다.