2009. 7. 13. 21:29

순수 가상 함수의 의미와 순수 가상 소멸자

순수 가상 함수?

virtual void func() = 0 과 같이 선언하는 순수 가상 함수의 의미는 '구현을 하지 않는다'는 뜻이 아니라, 진짜 뜻은 다음과 같다.

  • 이 클래스는 추상클래스이고,
  • 이 클래스를 상속한 모든 구체 클래스는 이 함수를 구현해야 한다.

보통 순수 가상 함수는 구현하지 않는 것이 보통이지만, 순수 가상 소멸자는 예외이다.

순수 가상 소멸자?

순수 가상 함수로 만들만한 멤버 함수가 하나도 없는 아주 드문 경우가 있다. 이러한 경우에는 보통 소멸자를 순수 가상함수로 선언해서 해결한다.

주의할 점은 파생 클래스의 소멸자가 호출될 때 결국 이 순수 가상 소멸자도 호출되기 때문에 반드시 구현해야 한다.

class AbstractAnimal {

protected:

        AbstractAnimal & operator=(const AbstractAnimal & rhs);

 

public:

        virtual ~AbstractAnimal() = 0 {

 

        }

};

 

class Animal : public AbstractAnimal {

public:

        Animal & operator=(const Animal & rhs);

};

 

class Lizard : public AbstractAnimal {

public:

        Lizard & operator(const Lizard & rhs);

};

 

class Chicken : public AbstractAnimal {

public:

        Chicken & operator(const Chicken & rhs);

};


참고 : More Effective C++