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

结果:

思维导图:

相关推荐
H.莓飛9 小时前
【数据结构】排序_OJ题(一):计数、桶与排序后的处理
java·开发语言·数据结构
wangchunyu1149 小时前
JAVA AQS与Lock实现原理(含CAS)
java·开发语言·word
爱喝水的鱼丶10 小时前
SAP-ABAP:ECC→S/4HANA ABAP 迁移升级指南——程序改造、语法兼容与性能优化 导语
运维·开发语言·性能优化·sap·abap·经验交流·开发交流
小灰灰搞电子11 小时前
Rust+Slint 实现FTP客户端调试助手源码分享
开发语言·后端·rust
外收内放11 小时前
面向对象高级(实战案例)
开发语言·python·学习
·present·11 小时前
CSAPP(lecture 4_01)
c语言·c++
FPGA小迷弟11 小时前
用 Claude Code 重构遗留系统:从评估到落地的完整实践指南
c++·python·ai·plotly·django·ai编程·claude
fanruitian12 小时前
python else用法
开发语言·python
程序员-King.12 小时前
【ROS1】Noetic 开发工作流程与常用命令
c++·ubuntu·ros
FRing0312 小时前
JavaScript入门到精通二十六(变量提升、函数剩余参数、展开运算符、ES6箭头函数)
开发语言·前端·javascript·es6·箭头函数