定义为纯虚函数,实际上是将这个类定义为抽象类,不能实例化对象。
纯虚函数通常没有定义体,但也完全可以拥有, 甚至可以显示调用。
析构函数可以是纯虚的,但纯虚析构函数必须有定义体,因为析构函数的调用是在子类中隐含的。
非纯的虚函数必须有定义体,不然是一个错误。
派生类的override虚函数定义必须和父类完全一致(c++11中使用override进行编译器检查)。除了一个特例,如果父类中返回值是一个指针或引用,子类override时可以返回这个指针(或引用)的派生。例如,在上面的例子中,在Base中定义了 virtual Base* clone(); 在Derived中可以定义为 virtual Derived* clone()。可以看到,这种放松对于Clone模式是非常有用的(也就是说override并不会检查返回值类型)。