纯虚函数(pure virtual function)
class Screen
{
public:
virtual void Show()=0; // 普通的虚函数后面加上"=0"这样就声明了一个pure virtual function
};
在什么情况下使用纯虚函数(pure vitrual function)?
当想在基类中抽象出一个方法,且该基类只做能被继承,而不能被实例化;
这个方法必须在派生类(derived class)中被实现;
我们定义了一个类如下:
class CShape
{
virtual void Show(){};
};
但没有CShape这种形状,因此我们不想让CShape这个类被实例化,我们首先想到的是将Show函数的定义(实现)部分删除如下:
class CShape
{
virtual void Show();
};
当我们使用下面的语句实例化一个CShape时:
CShape cs; //这是我们不允许的,但仅用上面的代码是可以通过编译(但link时失败)。
我们再来看看被继承的情况,我们需要一个CPoint2D的类,它继承自CShape.他必须实现基类(CShape)中的Show()方法。
其实使用最初的本意是让每一个派生自CShape的类,都要实现Show()方法,但时常我们可能在一个派生类中忘记了实现Show(),为了避免这种情况,pure virtual funcion发挥作用了。