对于一个比较大的程序,应当分成若干步骤进行。 先声明基类,再声明派生类,逐级进行,分步调试 声明基类Point类 #include〈iostream) friend ostream //声明类Point operator<<(ostream class Point &const Point &) (public: /重载运算符“<” Point(float x=0,float y=0); protected: /有默认参数的构造函数 /1受保护成员 void setPoint(float,float); float x,y; /设置坐标值 }; float getx() const{return x;}/读x坐标 float gety() const {return y;}/读y坐标
声明基类Point类 #include <iostream> //声明类Point class Point {public: Point(float x=0,float y=0); //有默认参数的构造函数 void setPoint(float,float); //设置坐标值 float getx( ) const{return x;}//读x坐标 float gety( ) const {return y;}//读y坐标 对于一个比较大的程序,应当分成若干步骤进行。 先声明基类,再声明派生类,逐级进行,分步调试 friend ostream & operator<<(ostream &,const Point &); //重载运算符“<<” protected: //受保护成员 float x,y; };
//Point的构造函数 Point:Point(float a,float b) //对x,y初始化 {x=a;y=b;} /设置x和y的坐标值 void Point:setPoint(float a,float b)/为x,y赋新值 {x=a;y=b;} /重载运算符“<”,使之能输出点的坐标 ostream operator<<(ostream &output,const Point &p) output<<"["<<p.x<<","<<p.y<"]"<<endl; return output; } 以上完成了基类Point类的声明
//Point的构造函数 Point::Point(float a,float b) //对x,y初始化 {x=a;y=b;} //设置x和y的坐标值 void Point::setPoint(float a,float b)//为x,y赋新值 {x=a;y=b;} //重载运算符“<<”,使之能输出点的坐标 ostream & operator<<(ostream &output,const Point &p) {output<<″[″<<p.x<<″,″<<p.y<<″]″<<endl; return output; } 以上完成了基类Point类的声明
现在要对上面写的基类声明进行调试,检查它是否有错, 为此要写出main函数。实际上它是一个测试程序。 int main() {Point p(3.5,6.4);/建立Pointa类对象p cout<<"x="<<p.getx()<<",y="<<p.gety()<<endl; /输出p的坐标值 p.setPoint(8.5,6.8);/重新设置p的坐标值 cout<<"p(new):"<<p<<endl; /用重载运算符“<”输出p点坐标 运行结果为 测试程序检查了基类中各函数的功 X=3.5,y=6.4 能,以及运算符重载的作用,证明 p(new):8.5,6.81 程序是正确的
现在要对上面写的基类声明进行调试,检查它是否有错, 为此要写出main函数。实际上它是一个测试程序。 int main( ) {Point p(3.5,6.4); //建立Point类对象p cout<<″x=″<<p.getX( )<<″,y=″<<p.getY( )<<endl; //输出p的坐标值 p.setPoint(8.5,6.8); //重新设置p的坐标值 cout<<″p(new):″<<p<<endl; //用重载运算符“<<”输出p点坐标 } 运行结果为 x=3.5,y=6.4 p(new):[8.5,6.8] 测试程序检查了基类中各函数的功 能,以及运算符重载的作用,证明 程序是正确的
(2) 声明派生类Circle 在上面的基础上,再写出声明派生类Circle的部分: class Circle:public Point /circle是Point类的公用派生类 {public: Circle(f1oatx=0,float y=0,float ra=0);/构造函数 void setRadius(float);/设置半径值 float getRadius()const;//读取半径值 float area()const;/计算圆面积 friend ostream &operator<<(ostream &const Circle & /重载运算符“<” private: float radius; };
(2) 声明派生类Circle 在上面的基础上,再写出声明派生类Circle的部分: class Circle:public Point //circle是Point类的公用派生类 {public: Circle(float x=0,float y=0,float r=0); //构造函数 void setRadius(float); //设置半径值 float getRadius( ) const; //读取半径值 float area ( ) const; //计算圆面积 friend ostream &operator<<(ostream &,const Circle &); //重载运算符“<<” private: float radius; };
/定义构造函数,对圆心坐标和半径初始化 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<<"Center=["<<c.x<<","<<c.y<<"]r="<<c.ra dius<<",area="<<c.area()<<endl; return output;
//定义构造函数,对圆心坐标和半径初始化 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<<″Center=[″<<c.x<<″,″<<c.y<<″],r=″<<c.ra dius<<″,area=″<<c.area( )<<endl; return output; }