순수 가상 함수

순수 가상 함수는 함수의 정의 부분을 필요로 하지 않는다.

virtual void Draw() const = 0;
위와 같은 함수 원형만 가지고 있는 함수가 바로 순수 가상 함수.
  • 함수정의가 없음
  • 하나 이상의 순수 가상 함수를 가짐
  • 자식 클래스에서 오버라이딩 한다
  • 다형성을 이용하여 함수 호출
  • 추상 클래스의 객체를 만드는것은 불가능
#include <iostream>

using namespace std;

// 일반적인 '도형'을 상징하는 클래스
class Shape
{
public:
    void Move(double x, double y);
    virtual void Draw() const = 0; // 순수 가상함수 생성

    Shape();
    Shape(double x, double y);

protected:
    double _x;
    double _y;
};

Shape::Shape()
{
    _x = _y = 0.0;
}

Shape::Shape(double x, double y)
{
    _x = x;
    _y = y;
}

void Shape::Move(double x, double y)
{
    _x = x;
    _y = y;
}

// void Shape::Draw() const
// {
//     cout << "[Shape] Position = (" << _x << ", " << _y << ")" << endl;
// }

Shape::Draw() 는 함수 선언부에서 '순수 가상 함수' 로 선언되었기 때문에 정의부에서 위와 같이 주석처리하였다. 이제부터는 객체타입에 따라 자동으로 Rectangle::Draw() 또는 Circle::Draw() 가 호출된다.
저작자 표시
신고

'컴퓨터 언어 > C++' 카테고리의 다른 글

예외 처리, 함수 깊숙히  (0) 2012.12.24
예외 처리  (0) 2012.12.21
오버라이딩  (0) 2012.12.20
가상함수를 이용한 다형성 구현  (0) 2012.12.20
다중상속(Multiplex inheritance)  (0) 2012.12.20
접근제어 키워드  (0) 2012.12.20