C++&QT day 5

实现一个图形类(Shape),包含受保护成员属性:周长、面积,

公共成员函数:特殊成员函数书写

定义一个圆形类(Circle),继承自图形类,包含私有属性:半径

公共成员函数:特殊成员函数、以及获取周长、获取面积函数

定义一个矩形类(Rect),继承自图形类,包含私有属性:长度、宽度

公共成员函数:特殊成员函数、以及获取周长、获取面积函数

在主函数中,分别实例化圆形类对象以及矩形类对象,并测试相关的成员函数。

cpp 复制代码
#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;
}

结果:

思维导图:

相关推荐
我可以将你更新哟几秒前
在Ubuntu 22.04上安装C++编译工具
linux·c++·ubuntu
ss2732 分钟前
类的线程安全:多线程编程-银行转账系统:如果两个线程同时修改同一个账户余额,没有适当的保护机制,会发生什么?
java·开发语言·数据库
Skrrapper4 分钟前
TCPTP协议是什么?以及Socket使用指南
网络·c++·websocket·计算机网络
写代码的【黑咖啡】6 分钟前
深入了解 Python 中的 Seaborn:优雅的数据可视化利器
开发语言·python·信息可视化
咔咔咔的8 分钟前
840. 矩阵中的幻方
c++
星火开发设计14 分钟前
栈的深度解析与C++实现
开发语言·数据结构·c++·学习·知识
再睡一夏就好17 分钟前
LInux线程池实战:单例模式设计与多线程安全解析
linux·运维·服务器·开发语言·javascript·c++·ecmascript
我家大宝最可爱18 分钟前
windows搭建agent环境
c++·chatgpt
郝学胜-神的一滴26 分钟前
机器学习数据工程之基石:论数据集划分之道与sklearn实践
开发语言·人工智能·python·程序人生·机器学习·sklearn
沐知全栈开发27 分钟前
MySQL 分组
开发语言