正常情况下纯虚函数类似于java中的抽象函数,只提供接口,不提供定义,由不同的子类提供不同的实现,从而表现出多态。但是也有两个特殊的情况。
情况一:纯虚函数也是可以有实现体的,只是由于不能建立基类的对象,因此不能直接调用,但是可以在子类中通过作用域解析操作符静态调用,因此可以在里面添加一些公共的代码,例如:
class Base
{
public:
virtual void fun1()=0;
};
void Base::fun1()
{
cout << "Base::fun1"<<endl;
}
class Derived : public Base
{
public:
virtual void fun1()
{
Base::fun1();//静态调用
cout << "Derived::fun1"<<endl;
}
};
int main()
{
Base* pb= new Derived;
pb -> fun1();
delete pb;
}