作业代码
#include <iostream>
using namespace std;
class Shape
{
protected:
double cir;
double area;
public:
//无参构造
Shape() {cout<<"无参构造"<<endl;}
//有参构造
Shape(double c, double a):cir(c), area(a){cout<<"有参构造"<<endl;}
//析构函数
~Shape(){cout<<"析构函数"<<endl;}
//拷贝构造
Shape(const Shape&other):cir(other.cir), area(other.area)
{
cout<<"拷贝构造"<<endl;
}
//拷贝赋值
Shape& operator=(const Shape& other)
{
if(this != &other)
{
this->cir = other.cir;
this->area = other.area;
cout<<"拷贝赋值"<<endl;
}
return *this;
}
//移动赋值
Shape& operator=(Shape&& other)
{
this->cir = other.cir;
this->area = other.area;
return *this;
}
};
class Circle:public Shape
{
private:
double rad;
public:
//无参构造
Circle() {cout<<"无参构造"<<endl;}
//有参构造
Circle(double r):rad(r){cout<<"有参构造"<<endl;}
//析构函数
~Circle(){cout<<"析构函数"<<endl;}
//拷贝构造
Circle(const Circle&other):rad(other.rad){cout<<"拷贝构造"<<endl;}
//拷贝赋值
Circle& operator=(const Circle& other)
{
if(this != &other)
{
this->rad = other.rad;
cout<<"拷贝赋值"<<endl;
}
return *this;
}
//移动赋值
Circle& operator=(Circle&& other)
{
this->rad = other.rad;
return *this;
cout<<"移动赋值"<<endl;
}
//获取周长
double get_cir()
{
Shape::cir = rad*2*3.14;
return Shape::cir;
}
//获取面积
double get_area()
{
Shape::area = rad*rad*3.14;
return Shape::area;
}
};
class Rect:public Shape
{
private:
double len;
double width;
public:
//无参构造
Rect() {cout<<"无参构造"<<endl;}
//有参构造
Rect(double l, double w):len(l), width(w){cout<<"有参构造"<<endl;}
//析构函数
~Rect(){cout<<"析构函数"<<endl;}
//拷贝构造
Rect(const Rect&other):len(other.len), width(other.width){cout<<"拷贝构造"<<endl;}
//拷贝赋值
Rect& operator=(const Rect& other)
{
this->len = other.len;
this->width = other.width;
return *this;
}
//移动赋值
Rect& operator=(Rect&& other)
{
this->len = other.len;
this->width = other.width;
return *this;
}
//获取周长
double get_cir()
{
Shape::cir = (len+width)*2;
return Shape::cir;
}
//获取面积
double get_area()
{
Shape::area = len*width;
return Shape::area;
}
};
int main()
{
Circle c(3);
cout<<"c_cir = "<<c.get_cir()<<endl;
cout<<"c_area = "<<c.get_area()<<endl;
Rect r(3.5, 5.5);
cout<<"r_cir = "<<r.get_cir()<<endl;
cout<<"r_area = "<<r.get_area()<<endl;
return 0;
}
运行截图
思维导图
模拟面试