深入解析C++编程中的纯虚函数和抽象类

2020-01-06 13:45:49王旭

再定义一个指向基类Shape对象的指针变量pt,使它先后指向3个派生类对象 point, Circle和cylinder,然后通过指针调用各函数,如 pt->shapeName( ),pt ->area(), pt->volume( )。这时是通过动态关联分别确定应该调用哪个函数。分别输出不同类对象的信息。

程序运行结果如下:

 

 
  1. Point:[3.2,4.5](Point类对象point的数据:点的坐标)  Circle:[2.4,1.2], r=5.6 (Circle类对象circle的数据:圆心和半径) 
  2. Cylinder:[3.5,6.4], r=5.5, h=10.5 (Cylinder类对象cylinder的数据: 圆心、半径和高)   
  3. Point:x=3.2,y=4.5 (输出Point类对象point的数据:点的坐标)  area=0 (点的面积) 
  4. volume=0 (点的体积)   
  5. Circle:x=2.4,y=1.2 (输出Circle类对象circle的数据:圆心坐标)  area=98.5203 (圆的面积) 
  6. volume=0 (圆的体积)  Cylinder:x=3.5,y=6.4 (输出Cylinder类对象cylinder的数据:圆心坐标) 
  7. area=512.595 (圆的面积)  volume=891.96 (圆柱的体积) 

从本例可以进一步明确以下结论:

一个基类如果包含一个或一个以上纯虚函数,就是抽象基类。抽象基类不能也不必要定义对象。

抽象基类与普通基类不同,它一般并不是现实存在的对象的抽象(例如圆形(Circle)就是千千万万个实际的圆的抽象),它可以没有任何物理上的或其他实际意义方面的含义。

在类的层次结构中,顶层或最上面的几层可以是抽象基类。抽象基类体现了本类族中各类的共性,把各类中共有的成员函数集中在抽象基类中声明。

抽象基类是本类族的公共接口。或者说,从同一基类派生出的多个类有同一接口。