【C++】day5学习成果:继承和六个特殊成员函数的代码应用、静态成员 继承 类的关系模型 类的继承步骤的思维导图。

news2024/11/23 0:03:34

1.代码题:实现一个图形类(Shape),包含受保护成员属性:周长、面积,
公共成员函数:特殊成员函数书写
定义一个圆形类(Circle),继承自图形类,包含私有属性:半径
公共成员函数:特殊成员函数、以及获取周长、获取面积函数
定义一个矩形类(Rect),继承自图形类,包含私有属性:长度、宽度
公共成员函数:特殊成员函数、以及获取周长、获取面积函数
在主函数中,分别实例化圆形类对象以及矩形类对象,并测试相关的成员函数。

#include <iostream>

using namespace std;

class Shape
{
protected:
    double perimite;    //周长
    double area;        //面积
public:
    Shape()
    {
        cout<<"Shape::无参构造函数"<<endl;
    }
    Shape(double p,double a):perimite(p),area(a)
    {
        cout<<"Shape::有参构造函数"<<endl;
    }
    ~Shape()
    {
        cout<<"Shape::析构函数"<<endl;
    }
    //拷贝构造函数
    Shape(const Shape &other):perimite(other.perimite),area(other.area)
    {
        cout<<"Shape::拷贝构造函数"<<endl;
    }
    //拷贝赋值函数
    Shape & operator=(const Shape &other)
    {
        cout<<"Shape::拷贝赋值函数"<<endl;
        if(this!=&other)
        {
            this->perimite=other.perimite;
            this->area=other.area;
        }
        return *this;
    }
    //移动赋值函数
    Shape &operator=(Shape &&other)
    {
        cout<<"Shape::移动赋值函数"<<endl;
        this->perimite=other.perimite;
        this->area=other.area;
        return *this;
    }

};

class Circle:public Shape
{
private:
    double radius;
public:
    Circle()
    {
        cout<<"Circle::无参构造函数"<<endl;
    }
    Circle(double r):radius(r)
    {
        cout<<"Circle::有参构造函数"<<endl;
    }
    ~Circle()
    {
        cout<<"Circle::析构函数"<<endl;
    }
    //拷贝构造函数
    Circle(const Circle &other):
        Shape(other.perimite,other.area),radius(other.radius)
    {
        cout<<"Circle::拷贝构造函数"<<endl;
    }
    //拷贝赋值函数
    Circle & operator=(const Circle &other)
    {
        cout<<"Circle::拷贝赋值函数"<<endl;
        if(this!=&other)
        {
            this->radius=other.radius;
            perimite=other.perimite;
            area=other.area;
        }
        return *this;
    }
    //移动赋值函数
    Circle &operator=(Circle &&other)
    {
        cout<<"Circle::移动赋值函数"<<endl;
        this->radius=other.radius;
        perimite=other.perimite;
        area=other.area;
        return *this;
    }
    //周长的获取
    double get_perimite()
    {
        perimite=this->radius*2*3.14;
        return perimite;
    }
    //面积的获取
    double get_area()
    {
        area=this->radius*this->radius*3.14;
        return area;
    }
};

class Rect:public Shape
{
private:
    double width;       //长
    double height;      //宽
public:
    Rect()
    {
        cout<<"Rect::无参构造函数"<<endl;
    }
    Rect(double w,double h):width(w),height(h)
    {
        cout<<"Rect::有参构造函数"<<endl;
    }
    ~Rect()
    {
        cout<<"Rect::析构函数"<<endl;
    }
    //拷贝构造函数
    Rect(const Rect &other):
        Shape(other.perimite,other.area),
        width(other.width),height(other.height)
    {
        cout<<"Rect::拷贝构造函数"<<endl;
    }
    //拷贝赋值函数
    Rect & operator=(const Rect &other)
    {
        cout<<"Rect::拷贝赋值函数"<<endl;
        if(this!=&other)
        {
            this->width=other.width;
            this->height=other.height;
            perimite=other.perimite;
            area=other.area;
        }
        return *this;
    }
    //移动赋值函数
    Rect &operator=(Rect &&other)
    {
        cout<<"Rect::移动赋值函数"<<endl;
        this->width=other.width;
        this->height=other.height;
        perimite=other.perimite;
        area=other.area;
        return *this;
    }
    //周长的获取
    double get_perimite()
    {
        perimite=(this->width+this->height)*2;
        return perimite;
    }
    //面积的获取
    double get_area()
    {
        area=(this->width)*(this->height);
        return area;
    }
};

int main()
{
    Circle c1(5);
    cout << "c1.perimite="<<c1.get_perimite() << endl;
    cout << "c1.area="<<c1.get_area() << endl;
    Circle c2=c1;
    cout << "c2.perimite="<<c2.get_perimite() << endl;
    cout << "c2.area="<<c2.get_area() << endl;
    Circle c3;
//    cout << "c3.perimite="<<c3.get_perimite() << endl;
//    cout << "c3.area="<<c3.get_area() << endl;
    c3=c1;
    cout << "c3.perimite="<<c3.get_perimite() << endl;
    cout << "c3.area="<<c3.get_area() << endl;
    cout << "*************************************"<<endl;
    Rect r1(10,5);
    cout << "r1.perimite="<<r1.get_perimite() << endl;
    cout << "r1.area="<<r1.get_area() << endl;
    Rect r2=r1;
    cout << "r2.perimite="<<r2.get_perimite() << endl;
    cout << "r2.area="<<r2.get_area() << endl;
    Rect r3;
    r3=r1;
    cout << "r3.perimite="<<r3.get_perimite() << endl;
    cout << "r3.area="<<r3.get_area() << endl;

    return 0;
}

运行结果:
运行结果
2.学习思维导图

c++day5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1004728.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STC15/8单片机特有的PWM寄存器和普通定时器实现PWM输出

STC15/8单片机特有的PWM寄存器和普通定时器实现PWM输出 🌿主要针对STC15W4型号特有的6通道15位专门的高精度PWM。 🌿STC8系列 ✨STC15W4K32S4系列单片机具有6通道15位专门的高精度PWM(带死区控制)和2通道CCP(利用它的高速脉冲输出功能可实现11~16位PWM);(STC15F/L2K60S2系…

JAVA8接口使用问题

JAVA8接口使用问题 文章目录 JAVA8接口使用问题1、默认方法冲突问题&#xff08;1&#xff09;亲爹优先原则&#xff08;2&#xff09;左右为难 2、常量冲突问题 1、默认方法冲突问题 &#xff08;1&#xff09;亲爹优先原则 当一个类&#xff0c;既继承一个父类&#xff0c;…

助力智能化公路养护,基于YOLOv5s集成SPD-BIFPN-SE开发构建公路开裂检测识别系统

在前文中我们尝试构建了在隧道、涵洞尝尽下的自动智能化养护巡查相关的模型&#xff0c;进行了实地测试评估&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《基于轻量级YOLOv5s开发构建隧道基建裂痕、脱落等缺陷问题检测系统》 本文的想法是相近的&#xff0c;核心…

Linkerd2初探

Linkerd2初探 部署环境Linkerd简介安装Linkerd客户端在k8s上安装Linkerd控制平面&#xff08;服务端&#xff09;实验&#xff1a;数据平面代理注入demo应用安装viz插件&#xff08;可视化面板&#xff09;部署grafana 其他 部署环境 k8s环境: KIND 模拟kubernetes 1.21.1 kub…

页面设计都有哪些好用的工具推荐?

对于设计师来说&#xff0c;方便的页面设计工具和稳定的页面设计灵感也同样重要。 在今天的信息爆炸中&#xff0c;很容易找到页面设计工具&#xff0c;网上搜索有很多建议&#xff0c;但找到合适的页面设计工具并不那么简单。 本文推荐不容错过的9款页面设计工具 即时设计 …

【DevOps核心理念基础】3. 敏捷开发最佳实践

一、敏捷开发最佳实践 1.1 项目管理 1.2 需求管理 1.3 技术架构 1.4 技术开发 1.5 测试 二、敏捷开发最佳实践 2.1 敏捷开发的执行细节 三、全面的DevOps工具链 四、版本控制和协作开发工具 4.1 集中式版本控制工具 4.2 分布式版本控制工具 一、敏捷开发最佳实践 …

mysql的一些知识点或者说踩过的坑和想记住的内容

快速上传数据 这个应该是比inset into values更快的插入数据的办法了。 不过要求挺苛刻的&#xff0c;数据要整理成和表格一致&#xff0c;也就是说每条数据都是完整的一条&#xff0c;而不是一部分。 下面的示例我以***为分割符划分字段&#xff0c;以 \n来分割每条数据。 LO…

【atoi函数的功能介绍及使用与模拟实现——超详细版本】

atoi函数的功能介绍及使用与模拟实现——超详细版本 1.cplusplus网站介绍&#x1f4bb; 1.1atoi函数的功能介绍&#x1f4bb; 它的功能&#xff1a; 解析将其内容解释为整数的 C 字符串&#xff0c;该整数作为 类型的值返回。 该函数首先根据需要丢弃尽可能多的空格字符&…

java复习-eclipse开发工具使用

开发工具使用 项目文件结构 建立完成的项目目录中会自动创建有两个子目录&#xff1a; src&#xff1a;保存所有的 *.java 源文件bin&#xff1a;保存所有编译后的 *.class 程序文件&#xff0c;这些文件会自动进行编译处理 保存文件后&#xff0c;会自动进行编译。 快捷键…

无需专业技能,轻松创建个人博客:Cpolar+Emlog在Ubuntu上的搭建指南

文章目录 前言1. 网站搭建1.1 Emolog网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2.Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 3. 公网访问测试总结 前言 博客作为使…

基于轻量级YOLOv5s开发构建隧道基建裂痕、脱落等缺陷问题检测系统

隧道内的定期检查与维护&#xff0c;对于及时发现和消除潜在的安全隐患有着重要的作用&#xff0c;基于人工的传统巡查方式不仅极为低效而且成本很高&#xff0c;将智能化的图像检测识别计数与实际的养护巡查场景相结合&#xff0c;开发构建智能AI检测识别系统是否可行&#xf…

C++QT day 5

实现一个图形类&#xff08;Shape&#xff09;&#xff0c;包含受保护成员属性&#xff1a;周长、面积&#xff0c; 公共成员函数&#xff1a;特殊成员函数书写 定义一个圆形类&#xff08;Circle&#xff09;&#xff0c;继承自图形类&#xff0c;包含私有属性&#xff1a;半…

element-table 行的拖拽更改顺序(无需下载sortableJs

样例展示&#xff1a;vueelement 通过阅读element文档我们发现element并不提供拖拽相关的api 本博客通过element提供的行类名 注册函数 实现行与行的拖拽 1.设置el-table 的行样式类名 这里是用的是 function <el-table:data"outputData":row-class-name&qu…

Codeforces Round 896 (Div. 2)题解

前言: 3 solved of 7 A、B、C,太菜了&#xff0c;写B题的时候&#xff0c;常数设成1e5了&#xff0c;一直卡在Test 4,没想到一直提示我TLE&#xff0c;没有提示RE&#xff0c;导致我浪费了很多时间在B题上&#xff0c;最后时间太晚了交了TLE了一发睡觉去了 A-Make It Zero …

SpringCloud:Feign实现微服务之间相互请求

文章目录 &#x1f389;欢迎来到Java学习路线专栏~SpringCloud&#xff1a;Feign实现微服务之间相互请求 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博客&#x1f388;该系列文章专栏&#xff1a;Java学习路线&#x1f4dc;其他专栏&#xf…

Sui Move智能合约提供更智能和简单的编程

编写区块链和其他计算环境的代码有很多相似之处&#xff0c;但区块链的重点大部分都集中在构建智能合约上。智能合约部署编译后的代码&#xff0c;本质上是在区块链上自动执行交易的apps。Sui网络本地的Sui虚拟机使用Sui Move编程语言编写智能合约。 术语“智能合约”意味着区…

Python之离线安装第三方库

1、场景介绍 在一些服务器上&#xff0c;我们搭建完Python环境之后&#xff0c;因为服务器的网络限制原因&#xff0c;不能直接通过pip命令下载安装Python的依赖包。 因此&#xff0c;我们需要在可以正常上网的服务器上下载好所需的依赖包文件&#xff0c;然后拷贝到目标服务器…

Screen的详细全面安装教程及Screen的用法

Screen可以大大提高终端使用效率&#xff0c;是Linux系统管理和运维的必备技能。当我们开启Screen后&#xff0c;只要Screen进程没有终止&#xff0c;其内部运行的会话都可以恢复。即使网络连接中断&#xff0c;用户也可以重新进入已开启的Screen中&#xff0c;对中断的会话进行…

Three.js-绘制矩形shader

绘制图中的嵌套矩形框 方法&#xff1a; vec3 drawRect(vec2 st,vec2 center,float width,float height,float thickness,vec3 fillColor, vec3 strokeColor) {vec3 color vec3(0);float halfWidth width * .5;float halfHeight height * .5;float halfTickness thicknes…

《向量数据库指南》——Milvus Cloud当初为什么选择向量数据库这个赛道呢?

我们公司专注于向量数据库大约可以追溯到 2018 年左右。当时&#xff0c;向量数据库的概念并不广泛。我们的 CEO 力排众议&#xff0c;认为这个领域有巨大潜力&#xff0c;因为这与我们的愿景高度契合。我们的公司定位是构建一个能够在云上处理非结构化数据的基础设施产品。经过…