首先定义点类,应包含 x,y 坐标数据成员,坐标获取及设置函数、显示函数和面积计 算函数等成员函数等; 以点类为基类派生圆类,增加表示半径的数据成员,半径获取及设置函数、周长计算函 数、重载显示函数和面积计算函数等;
#include <iostream>
using namespace std;
class Point{
protected:
double x;
double y;
public:
Point(double xv=0,double yv=0);//有参构造
Point(const Point &p); //拷贝构造
~Point(); //析构函数
void show() const; //显示Point信息
double area()const; //面积=0
void setX(double xv); //设置X坐标
void setY(double yv); //设置Y坐标
double getX() const; //获取X坐标
double getY() const; //获取Y坐标
};
//有参构造
Point::Point(double xv,double yv){
x=xv;
y=yv;
cout<<"Point Constructor run"<<endl;
}
//拷贝构造
Point::Point(const Point &p){
x=p.x;
y=p.y;
cout<<"Point CopyConstructor run"<<endl;
}
//析构函数
Point::~Point(){
cout<<"Point Destructor run"<<endl;
}
//显示Point
void Point::show() const{
cout<<"("<<x<<","<<y<<")";
}
//设置X坐标
void Point::setX(double xv){
x=xv;
}
//设置Y坐标
void Point::setY(double yv){
y=yv;
}
//面积函数
double Point::area() const{
return 0;
}
//获取X坐标
double Point::getX() const{
return x;
}
//获取Y坐标
double Point::getY() const{
return y;
}
class Circle:protected Point
{
private:
double radius;
public:
static double PI;
Circle(double a=0,double b=0,double c=0);
Circle(Circle &a);
~Circle();
void setRadius(double a);
double getRadius()const;
double circumference()const;
double area()const;
void show()const;
};
double Circle:: PI=3.14159;
Circle::Circle(double a,double b,double c):Point(a,b),radius(c)
{cout<<"Circle Constructor run"<<endl;}
Circle::Circle(Circle &a):Point(a)
{
x=a.x;
y=a.y;
radius=a.radius;
cout<<"Circle CopyConstructor run"<<endl;
}
Circle::~Circle()
{
cout<<"Circle Destructor run"<<endl;
}
void Circle::setRadius(double a)
{
radius=a;
}
double Circle::getRadius()const
{
return radius;
}
double Circle::circumference()const
{
return 2*PI*radius;
}
double Circle::area()const
{
return PI*radius*radius;
}
void Circle::show()const
{
cout<<"("<<x<<","<<y<<")"<<",Radius="<<radius;
}
int main(void){
double r;
cout<<"输入圆的半径:"<<endl;
cin>>r;
Circle c1(1,2,4),c2,c3(c1);
c1.show();
cout<<endl<<"Area="<<c1.area()<<endl<<"Circumference="<<c1.circumference()<<endl;
c2.show();
cout<<endl<<"Area="<<c2.area()<<endl<<"Circumference="<<c2.circumference()<<endl;
c3.setRadius(r);
c3.show();
cout<<endl<<"Area="<<c3.area()<<endl<<"Circumference="<<c3.circumference()<<endl;
return 0;
}