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;
}

结果:

思维导图:

相关推荐
jingfeng5143 小时前
C++模板进阶
java·c++·算法
好学且牛逼的马3 小时前
GOLANG 接口
开发语言·golang
头发掉光的程序员3 小时前
第七章 利用Direct3D绘制几何体
c++·windows·图形渲染·direct12
ahauedu3 小时前
AI资深 Java 研发专家系统解析Java 中常见的 Queue实现类
java·开发语言·中间件
韭菜钟3 小时前
在Qt中用cmake实现类似pri文件的功能
开发语言·qt·系统架构
闲人编程3 小时前
Python第三方库IPFS-API使用详解:构建去中心化应用的完整指南
开发语言·python·去中心化·内存·寻址·存储·ipfs
CTRA王大大4 小时前
【golang】制作linux环境+golang的Dockerfile | 如何下载golang镜像源
linux·开发语言·docker·golang
zhangfeng11335 小时前
以下是基于图论的归一化切割(Normalized Cut)图像分割工具的完整实现,结合Tkinter界面设计及Python代码示
开发语言·python·图论
还梦呦6 小时前
2025年09月计算机二级Java选择题每日一练——第五期
java·开发语言·计算机二级
鱼鱼说测试7 小时前
postman接口自动化测试
开发语言·lua