再定义一个指向基类Shape对象的指针变量pt,使它先后指向3个派生类对象 point, Circle和cylinder,然后通过指针调用各函数,如 pt->shapeName( ),pt ->area(), pt->volume( )。这时是通过动态关联分别确定应该调用哪个函数。分别输出不同类对象的信息。
程序运行结果如下:
- Point:[3.2,4.5](Point类对象point的数据:点的坐标) Circle:[2.4,1.2], r=5.6 (Circle类对象circle的数据:圆心和半径)
- Cylinder:[3.5,6.4], r=5.5, h=10.5 (Cylinder类对象cylinder的数据: 圆心、半径和高)
- Point:x=3.2,y=4.5 (输出Point类对象point的数据:点的坐标) area=0 (点的面积)
- volume=0 (点的体积)
- Circle:x=2.4,y=1.2 (输出Circle类对象circle的数据:圆心坐标) area=98.5203 (圆的面积)
- volume=0 (圆的体积) Cylinder:x=3.5,y=6.4 (输出Cylinder类对象cylinder的数据:圆心坐标)
- area=512.595 (圆的面积) volume=891.96 (圆柱的体积)
从本例可以进一步明确以下结论:
一个基类如果包含一个或一个以上纯虚函数,就是抽象基类。抽象基类不能也不必要定义对象。
抽象基类与普通基类不同,它一般并不是现实存在的对象的抽象(例如圆形(Circle)就是千千万万个实际的圆的抽象),它可以没有任何物理上的或其他实际意义方面的含义。
在类的层次结构中,顶层或最上面的几层可以是抽象基类。抽象基类体现了本类族中各类的共性,把各类中共有的成员函数集中在抽象基类中声明。
抽象基类是本类族的公共接口。或者说,从同一基类派生出的多个类有同一接口。










