解锁即可观看《物联网/嵌入式工程师》完整课程视频

物联网/嵌入式工程师

重磅升级:新增硬件电路设计与实战,让你软硬通吃,同级PK无敌!行业风口、政策倾斜,新晋热门高薪不内卷!0基础一站式就业完整路径,抢占先发优势!

【第1周】迈进供不应求的物联网/嵌入式行业大门
【第2周】C语言进阶-编程思想
【第3周】C语言高级进阶
【第4周】C语言项目实战与《阶段笔试》
【第5周】数据结构-线性结构、非线性结构等
【第6周】排序与复杂度&数据结构项目实战
【第7周】Shell编程和Makefile工程管理
【第8周】Linux文件IO和标准IO
【第9周】Linux下文件操作项目实践与阶段评测
【第10周】Linux 多进程、多线程、IO模型
【第11周】Linux 项目实战-实现并发服务器模型与企业笔试
【第12周】网络基础和UDP Socket编程
【第13周】TCP Socket编程和WireShark抓包分析
【第14周】网络编程项目实战-网络视频监控与企业笔试
【第15周】从C到C++
【第16周】软件设计模式与C++11新特性
【第17周】项目实战-C++语言实现五子棋游戏与企业笔试
【第18周】嵌入式产品人机交互必备-QT框架
【第19周】项目实战-QT开发音乐播放器
【第20周】智能硬件开发-ARM核介绍和基础外设
【第21周】智能硬件开发-单片机常用外设
【第22周】stm32芯片-智能硬件项目实战与企业笔试
【第23周】大厂必备- linux内核与文件系统移植
【第24周】嵌入式开发-系统移植-bootloader、yocto
【第25周】嵌入式底层核心技能-Linux设备驱动初级
【第26周】嵌入式底层核心技能-Linux设备驱动中级
【第27周】嵌入式底层核心技能-Linux设备驱动高级1
【第28周】嵌入式底层核心技能-Linux设备驱动高级2
【第29周】智能家居项目实战之Linux智能网关端开发
【第30周】智能家居项目实战之STM32单片机设备端开发
【第31周】人脸指纹识别考勤机设计与实战
【第32周】硬件电路设计-电路基础知识
【第33周】STM32最小系统 - 硬件电路设计实战项目(一)
【第34周】CAN总线分析仪 - 硬件电路设计实战项目(二)
【第35周】4路输入输出控制器 - 硬件电路设计实战项目(三)
【第36周】8路逻辑分析仪 - 硬件电路设计实战项目(四)
【第37周】项目答辩和就业指导&独立开发阶段-三大热门领域项目
章节
问答
课签
笔记
评论
占位
占位

运算符重载

RMB.h

class RMB {
public:
    RMB(int _yuan, int _jiao, int _fen);
    ~RMB();

private:
    int yuan = 0;
    int jiao = 0;
    int fen = 0;
};

RMB.cpp

#include "RMB.h"

RMB::RMB(int _yuan, int _jiao, int _fen)
{
    yuan = _yuan;
    jiao = _jiao;
    fen = _fen;
}

RMB::~RMB()
{

}

为这个类写了些必要的部分之后,我们要完成一个功能,加法功能,1块9毛加2块3毛,用程序应该怎么写呢?我们可以添加一个 Add 函数,如下:

RMB.h

class RMB {
public:
    RMB(int _yuan, int _jiao, int _fen);
    ~RMB();

    RMB Add(const RMB & rmb);

private:
    int yuan = 0;
    int jiao = 0;
    int fen = 0;
};

RMB.cpp

#include "RMB.h"

RMB::RMB(int _yuan, int _jiao, int _fen)
{
    yuan = _yuan;
    jiao = _jiao;
    fen = _fen;
}

RMB::~RMB()
{

}

RMB RMB::Add(const RMB & rmb)
{
    RMB rmbRes(0, 0, 0);

    // 分
    int f = rmb.fen + fen;
    int f_ = f / 10;
    rmbRes.fen = f % 10;

    // 角
    int j = rmb.jiao + jiao + f_;
    int j_ = j / 10;
    rmbRes.jiao = j % 10;

    // 元
    int y = rmb.yuan + yuan + j_;
    int y_ = y / 10;
    rmbRes.yuan = y % 10;

    return rmbRes;
}

这样,我们就实现了一个 Add 函数,如果想要把两个人民币加起来,就可以这样用:

int main(int argc,char **argv)
{
    RMB rmbA(1, 9, 0);
    RMB rmbB(2, 5, 0);

    RMB rmbC = rmbA.Add(rmbB);
    return 0;
}

但是这样看上去好像有点别扭,事实上,在很多不支持运算符重载的语言里,我们都是这样干的。但是在 C++ 里,有一种更好的方式,可以把 + 号进行重载。

我们可以把这个 Add 函数修改成 + 号的重载:

RMB.h

class RMB {
public:
    RMB(int _yuan, int _jiao, int _fen);
    ~RMB();

    // RMB & Add(const RMB & rmb);
    RMB operator + (const RMB & rmb);

private:
    int yuan = 0;
    int jiao = 0;
    int fen = 0;
};

RMB.cpp

#include "RMB.h"

RMB::RMB(int _yuan, int _jiao, int _fen)
{
    yuan = _yuan;
    jiao = _jiao;
    fen = _fen;
}

RMB::~RMB()
{

}

// RMB & RMB::Add(const RMB & rmb)
RMB RMB::operator + (const RMB & rmb)
{
    RMB rmbRes(0, 0, 0);

    // 分
    int f = rmb.fen + fen;
    int f_ = f / 10;
    rmbRes.fen = f % 10;

    // 角
    int j = rmb.jiao + jiao + f_;
    int j_ = j / 10;
    rmbRes.jiao = j % 10;

    // 元
    int y = rmb.yuan + yuan + j_;
    int y_ = y / 10;
    rmbRes.yuan = y % 10;

    return rmbRes;
}

在这样修改之后,使用的时候,我们就可以写出来更优雅的代码了。

int main(int argc,char **argv)
{
    RMB rmbA(1, 9, 0);
    RMB rmbB(2, 5, 0);

    RMB rmbC = rmbA + rmbB;
    return 0;
}

可以看到我们直接把两个对象用 + 号加了起来,这比之前使用函数看起来会好得多。

在 C++ 中,有很多符号都可以重载,也有一些不能被重载。

可重载的运算符:

不可重载的运算符:

. 
.* ->*
::
sizeof
?:
#

任务

?不会了怎么办
||

提问题

写笔记

公开笔记
提交
||

请验证,完成请求

由于请求次数过多,请先验证,完成再次请求

加群二维码

打开微信扫码自动绑定

您还未绑定服务号

绑定后可得到

  • · 粉丝专属优惠福利
  • · 大咖直播交流干货
  • · 课程更新,问题答复提醒
  • · 账号支付安全提醒

收藏课程后,能更快找到我哦~

使用 Ctrl+D 可将课程添加到书签

邀请您关注公众号
关注后,及时获悉本课程动态

举报

0/150
提交
取消
全部 精华 我要发布
全部 我要发布
最热 最新
只看我的

手记推荐

更多

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?