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

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

Shape类有3个成员函数,没有数据成员。3个成员函数都声明为虚函数,其中shapeName声明为纯虚函数,因此Shape是一个抽象基类。shapeName函数的作用是输出具体的形状(如点、圆、圆柱体)的名字,这个信息是与相应的派生类密切相关的,显然这不应当在基类中定义,而应在派生类中定义。所以把它声明为纯虚函数。Shape虽然是抽象基类,但是也可以包括某些成员的定义部分。类中两个函数area(面积)和volume (体积)包括函数体,使其返回值为0(因为可以认为点的面积和体积都为0)。由于考虑到在Point类中不再对area和volume函数重新定义,因此没有把area和volume函数也声明为纯虚函数。在Point类中继承了Shape类的area和volume函数。这3个函数在各派生类中都要用到。

第(2)部分

 

 
  1. //声明Point类  class Point:public Shape//Point是Shape的公用派生类 
  2. {  public: 
  3. Point(float=0,float=0);  void setPoint(float ,float ); 
  4. float getX( )const {return x;}  float getY( )const {return y;} 
  5. virtual void shapeName( )const {cout<<"Point:";}//对虚函数进行再定义  friend ostream & operator <<(ostream &,const Point &); 
  6. protected:  float x,y; 
  7. };  //定义Point类成员函数 
  8. Point::Point(float a,float b)  {x=a;y=b;} 
  9. void Point::setPoint(float a,float b)  {x=a;y=b;} 
  10. ostream & operator <<(ostream &output,const Point &p)  { 
  11. output<<"["<<p.x<<","<<p.y<<"]";  return output;