11.3 纯虚函数与抽象类

    当在基类中无法为虚函数提供任何有实际意义的定义时,可以将该虚函数声明为纯虚函数,它的实现留给该基类的派生类去做。

    11.3.1 纯虚函数的声明和定义

    纯虚函数是一种特殊的虚函数,它的一般格式如下所示。


    class类名 { virtual类型函数名(参数表)=0; …… };

    纯虚函数不能被直接调用,仅提供一个与派生类一致的接口,如代码11.6所示。

    代码11.6 纯虚函数使用举例PureVirtualFuncSample


    <————————————-文件名:example1106.cpp——————————————> 01 #include<iostream> 02 using namespace std; 03 class A//类A定义 04 { 05 public: 06 virtual void disp()=0;//纯虚函数,类A作为抽象类 07 }; 08 class B:public A//类B由抽象类A派生而来 09 { 10 public: 11 virtual void disp()//此处virtual可省略,继承 12 { 13 cout<<"This is from B"<<endl; 14 } 15 }; 16 class C:public B//类C从类B派生而来 17 { 18 public: 19 virtual void disp() 20 { 21 cout<<"This is from C"<<endl; 22 } 23 }; 24 void display(A*a)//display函数,以类A指针对参数 25 { 26 a->disp(); 27 } 28 int main() 29 { 30 B*pB=new B;//动态内存申请 31 C*pC=new C; 32 display(pB);//取决于为指针赋值的数据类型 33 display(pC); 34 return 0; 35 }

    输出结果如下所示。


    This is from B This is from C

    【代码解析】代码第6行的,类A虚函数disp仅起到为派生类提供一个一致接口的作用,派生类中重定义的disp()用来决定具体要完成的动作,通过这个例子,读者应仔细体会一致接口的意义所在。