实现一个图形类(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;
}
结果:
思维导图: