Point从Shape继承了3个成员函数,由于“点”是没有面积和体积的,因此不必重新定义area和volume。虽然在Point类中用不到这两个函数,但是Point类仍然从Shape类继承了这两个函数,以便其派生类继承它们。shapeName函数在Shape类中是纯虚函数, 在Point类中要进行定义。Point类还有自己的成员函数( setPoint, getX, getY)和数据成 员(x和y)。
第(3)部分
- //声明Circle类 class Circle:public Point
- { public:
- Circle(float x=0,float y=0,float r=0); void setRadius(float );
- float getRadius( )const; virtual float area( )const;
- virtual void shapeName( )const {cout<<"Circle:";}//对虚函数进行再定义 friend ostream &operator <<(ostream &,const Circle &);
- protected: float radius;
- }; //声明Circle类成员函数
- Circle::Circle(float a,float b,float r):Point(a,b),radius(r){} void Circle::setRadius(float r):radius(r){}
- float Circle::getRadius( )const {return radius;} float Circle::area( )const {return 3.14159*radius*radius;}
- ostream &operator <<(ostream &output,const Circle &c) {
- output<<"["<<c.x<<","<<c.y<<"], r="<<c.radius; return output;
- }
在Circle类中要重新定义area函数,因为需要指定求圆面积的公式。由于圆没有体积,因此不必重新定义volume函数,而是从Point类继承volume函数。shapeName函数是虚函数,需要重新定义,赋予新的内容(如果不重新定义,就会继承Point类中的 shapeName函数)。此外,Circle类还有自己新增加的成员函数(setRadius, getRadius)和数据成员(radius)。










