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

2020-01-06 13:45:49王旭
  • //main函数  int main( ) 
  • {  Point point(3.2,4.5); //建立Point类对象point 
  • Circle circle(2.4,1.2,5.6);  //建立Circle类对象circle 
  • Cylinder cylinder(3.5,6.4,5.2,10.5);  //建立Cylinder类对象cylinder 
  • point.shapeName();  //静态关联 
  • cout<<point<<endl;  circle.shapeName(); //静态关联 
  • cout<<circle<<endl;  cylinder.shapeName(); //静态关联 
  • cout<<cylinder<<endl<<endl;  Shape *pt; //定义基类指针 
  • pt=&point; //指针指向Point类对象  pt->shapeName( ); //动态关联 
  • cout<<"x="<<point.getX( )<<",y="<<point.getY( )<<"narea="<<pt->area( )  <<"nvolume="<<pt->volume()<<"nn"; 
  • pt=&circle; //指针指向Circle类对象  pt->shapeName( ); //动态关联 
  • cout<<"x="<<circle.getX( )<<",y="<<circle.getY( )<<"narea="<<pt->area( )  <<"nvolume="<<pt->volume( )<<"nn"; 
  • pt=&cylinder; //指针指向Cylinder类对象  pt->shapeName( ); //动态关联 
  • cout<<"x="<<cylinder.getX( )<<",y="<<cylinder.getY( )<<"narea="<<pt->area( )  <<"nvolume="<<pt->volume( )<<"nn"; 
  • return 0;  } 

    在主函数中调用有关函数并输出结果。先分别定义了 Point类对象point,Circle类对象circle和Cylinder类对象cylinder。然后分别通过对象名point, circle和cylinder调用 了shapeNanme函数,这是属于静态关联,在编译阶段就能确定应调用哪一个类的 shapeName函数。同时用重载的运箅符“<<”来输出各对象的信息,可以验证对象初始化是否正确。