实现一个图形类(Shape),包含受保护成员属性:周长、面积,
公共成员函数:特殊成员函数书写
定义一个圆形类(Circle),继承自图形类,包含私有属性:半径
公共成员函数:特殊成员函数、以及获取周长、获取面积函数
定义一个矩形类(Rect),继承自图形类,包含私有属性:长度、宽度
公共成员函数:特殊成员函数、以及获取周长、获取面积函数
在主函数中,分别实例化圆形类对象以及矩形类对象,并测试相关的成员函数。
#include <iostream>
#define PI 3.14//π
using namespace std;
//图形类
class Shape
{
protected:
double cir;//周长
double area;//面积
public:
//无参构造
Shape()
{
cout<<"Shape::无参构造"<<endl;
}
//有参构造
Shape(double cir,double area):cir(cir),area(area)
{
cout<<"Shape::有参构造"<<endl;
}
//析构函数
~Shape()
{
cout<<"Shape::析构函数"<<endl;
}
//拷贝构造函数
Shape(const Shape &other):cir(other.cir),area(other.area)
{
cout<<"Shape::拷贝构造函数"<<endl;
}
//拷贝赋值函数
Shape & operator=(const Shape &other)
{
if(this!=&other)//确定不是自己给自己赋值
{
this->cir=other.cir;
this->area=other.area;
}
cout<<"Shape::拷贝赋值函数"<<endl;
return *this;
}
};
class Circle:public Shape
{
private:
double rad;//半径
public:
//无参构造
Circle()
{
cout<<"Circle::无参构造"<<endl;
}
//有参构造
Circle(double rad):rad(rad)
{
cout<<"Cricle::有参构造"<<endl;
}
//析构函数
~Circle()
{
cout<<"Circle::析构函数"<<endl;
}
//拷贝构造函数
Circle(const Circle &other):rad(other.rad)
{
cout<<"Cricle::拷贝构造函数"<<endl;
}
//拷贝赋值函数
Circle & operator=(const Circle &other)
{
if(this!=&other)//确定不是自己给自己赋值
{
this->rad=other.rad;
}
cout<<"Circle::拷贝赋值函数"<<endl;
return *this;
}
//计算周长函数
void get_cir()
{
cir=2*PI*rad;
cout<<"cir="<<cir<<endl;
}
//计算面积函数
void get_area()
{
area=PI*rad*rad;
cout<<"area="<<area<<endl;
}
};
class Rect:public Shape
{
private:
double length;//长度
double width;//宽度
public:
//无参构造
Rect()
{
cout<<"Rect::无参构造"<<endl;
}
//有参构造
Rect(double length,double width):length(length),width(width)
{
cout<<"Rect::有参构造"<<endl;
}
//析构函数
~Rect()
{
cout<<"Rect::析构函数"<<endl;
}
//拷贝构造函数
Rect(const Rect &other):length(other.length),width(other.width)
{
cout<<"Rect::拷贝构造函数"<<endl;
}
//拷贝赋值函数
Rect & operator=(const Rect &other)
{
if(this!=&other)//确定不是自己给自己赋值
{
this->length=other.length;
this->width=other.width;
}
cout<<"Rect::拷贝赋值函数"<<endl;
return *this;
}
//计算周长函数
void get_cir()
{
cir=(length+width)*2;
cout<<"cir="<<cir<<endl;
}
//计算面积函数
void get_area()
{
area=length*width;
cout<<"area="<<area<<endl;
}
};
int main()
{
//实例一个圆
Circle c(3);
c.get_cir();
c.get_area();
//实例拷贝构造函数
Circle c1=c;
c1.get_cir();
c1.get_area();
//实例一个矩形
Rect r(3,4);
r.get_cir();
r.get_area();
//实例拷贝赋值函数
Rect r1;
r1=r;
r1.get_cir();
r1.get_area();
return 0;
}
结果:
思维导图: