Shape类有3个成员函数,没有数据成员。3个成员函数都声明为虚函数,其中shapeName声明为纯虚函数,因此Shape是一个抽象基类。shapeName函数的作用是输出具体的形状(如点、圆、圆柱体)的名字,这个信息是与相应的派生类密切相关的,显然这不应当在基类中定义,而应在派生类中定义。所以把它声明为纯虚函数。Shape虽然是抽象基类,但是也可以包括某些成员的定义部分。类中两个函数area(面积)和volume (体积)包括函数体,使其返回值为0(因为可以认为点的面积和体积都为0)。由于考虑到在Point类中不再对area和volume函数重新定义,因此没有把area和volume函数也声明为纯虚函数。在Point类中继承了Shape类的area和volume函数。这3个函数在各派生类中都要用到。
第(2)部分
- //声明Point类 class Point:public Shape//Point是Shape的公用派生类
- { public:
- Point(float=0,float=0); void setPoint(float ,float );
- float getX( )const {return x;} float getY( )const {return y;}
- virtual void shapeName( )const {cout<<"Point:";}//对虚函数进行再定义 friend ostream & operator <<(ostream &,const Point &);
- protected: float x,y;
- }; //定义Point类成员函数
- Point::Point(float a,float b) {x=a;y=b;}
- void Point::setPoint(float a,float b) {x=a;y=b;}
- ostream & operator <<(ostream &output,const Point &p) {
- output<<"["<<p.x<<","<<p.y<<"]"; return output;
- }










