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

结果:

思维导图:

相关推荐
古月居GYH13 分钟前
嵌入式C语言高级编程:OOP封装、TDD测试与防御性编程实践
c语言·开发语言·tdd
ghost14319 分钟前
Python自学第1天:变量,打印,类型转化
开发语言·python·学习
დ旧言~29 分钟前
【Qt】界面优化
qt
汤姆_51135 分钟前
【c语言】深入理解指针1
c语言·开发语言
gospace41 分钟前
Golang Event Bus 最佳实践:使用 NSQite 实现松耦合架构
开发语言·架构·golang·事件·总线·event·event bus
风中飘爻1 小时前
JavaScript:表单及正则表达式验证
开发语言·javascript·ecmascript
极客先躯1 小时前
高级java每日一道面试题-2025年4月07日-微服务篇[Nacos篇]-如何监控Nacos的运行状态?
java·开发语言·微服务
牛了爷爷1 小时前
php伪协议
android·开发语言·php
CSUC1 小时前
【开发语言】悬空指针问题
开发语言
GOTXX2 小时前
【Qt】QWidget 核⼼属性详解
开发语言·前端·c++·qt·机器学习·ai·widget