章节
问答
课签
笔记
评论
占位
占位

运算符重载

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个积分

继续发表请点击 "确定"

为什么扣积分?