12.2一个典型的例子编译时多态性 例12.1建立一个Point(点)类,包含数据成员 x,y(坐标点)。 以Poin类为基类,派生出一个Circle(圆)类, 增加数据成员r(半径); 再以Circlez类为直接基类,派生出一个 Cylinder(圆柱体)类,再增加数据成员h(高)。 编写程序,重载运算符“<<”和“>”,使之 能用于输出以上类对象 。 先声明基类,再声明派生类,逐级进行,分步 调试。 2017年4月26日星期 第12章多态性与虚函数 0雪2时14分39秒 BAC
HOME2017年4月26日星期 三12时14分39秒 第12章 多态性与虚函数 11 例12.1 建立一个Point(点)类,包含数据成员 x,y(坐标点)。 以Point类为基类,派生出一个Circle(圆)类, 增加数据成员r(半径); 再以Circle类为直接基类,派生出一个 Cylinder(圆柱体)类,再增加数据成员h(高)。 编写程序,重载运算符“<<”和“>>” ,使之 能用于输出以上类对象。 先声明基类,再声明派生类,逐级进行,分步 调试
(1)声明基类Pointa类 #include <iostream> using namespace std; class Point { public: Point(double a=0,double b=0){x=a;y=b;} void setPoint(double a,double b){x=a;y=b;) double getx()const {return x;} double getY()const {return y;} friend ostream operator<<(ostream &,const Point &);/ 载运算符“<<”,输出点坐标 protected: double x,y; 2017年4月26日星期 第12章多态性与虚函数 H0画2时14分40秒 BACK NEXT
HOME2017年4月26日星期 三12时14分40秒 第12章 多态性与虚函数 12 #include <iostream> using namespace std; class Point { public: Point(double a=0,double b=0) { x=a;y=b;} void setPoint(double a,double b) { x=a;y=b;} double getX( ) const {return x;} double getY( ) const {return y;} friend ostream & operator<<(ostream &,const Point &);//重 载运算符“<<” ,输出点坐标 protected: double x,y; };
ostream operator<<(ostream &output,const Point &p) output<<"["<<p.x<<","<<p.y<<"]"<<endl; return output; int main() { Point p(3.5,6.4); cout<<"x="<<p.getx()<<",y="<<p.getY()<<endl; p.setPoint(8.5,6.8);/重新设置p的坐标值 cout<<"p(new):"<<p<<endl; return 0; 2017年4月26日星期 第12章多态性与虚函数 13 0画2时14分40秒 BACK NEXT
HOME2017年4月26日星期 三12时14分40秒 第12章 多态性与虚函数 13 ostream & operator<<(ostream &output,const Point &p) { output<<"["<<p.x<<" , "<<p.y<<"]"<<endl; return output; } int main( ) { Point p(3.5,6.4); cout<<"x="<<p.getX( )<<" ,y="<<p.getY( )<<endl; p.setPoint(8.5,6.8); //重新设置p的坐标值 cout<<"p(new):"<<p<<endl; return 0; }
(2)声明派生类Circle class Circle:public Point { public: Circle(double a=0,double b-0,double r=0):Point(a,b),radius(r){}/构造函数 void setRadius(double r){radius-=r;}∥设置半径值 double getRadius()const{return radius;}/读取半径值 double area (const {return 3.14159*radius*radius;}// 圆面积 friend ostream &operator<<(ostream &,const Circle &);/ 载运算符“<<”, 输出圆的信息 protected: double radius; 2017年4月26日星期 第12章多态性与虚函数 0雪2时14分40秒 14 BACK NEXT
HOME2017年4月26日星期 三12时14分40秒 第12章 多态性与虚函数 14 class Circle:public Point { public: Circle(double a=0,double b=0,double r=0) :Point(a,b),radius(r){ }//构造函数 void setRadius(double r){radius=r;} //设置半径值 double getRadius( ) const {return radius;} //读取半径值 double area ( ) const {return 3.14159*radius*radius;} //计算 圆面积 friend ostream &operator<<(ostream &,const Circle &);//重 载运算符“<<” ,输出圆的信息 protected: double radius; };
/重载运算符“<<”,输出圆的信息 ostream &operator<<(ostream &output,const Circle &c) output<<"Center="<<c.x<<","<<c.y <<,r="<<c.radius <<",area="<<c.area()<<endl; return output; 2017年4月26日星期 第12章多态性与虚函数 15 0雪2时14分40秒 BACK NEXT
HOME2017年4月26日星期 三12时14分40秒 第12章 多态性与虚函数 15 //重载运算符“<<” ,输出圆的信息 ostream &operator<<(ostream &output,const Circle &c) { output<<"Center=["<<c.x<<" , "<<c.y <<"],r="<<c.radius <<" ,area="<<c.area( )<<endl; return output; }