C++运算符重载

重写大量的运算符函数非常浪费时间效率也不高,C++标准为了改善这些,封装了很多可用的接口函数,下面来看一下,重写一个类的比较操作符。

考虑到<,==,!=,>,<=,>=将要实现6个操作符,而真正需要实现的只有<和==两个,其他的四种都能通过这两个组合而成

struct Point {
    int x; int y;
    friend bool operator == (const Point& lhs, const Point& rhs) {
        return std::tie(lhs.x, lhs.y) == std::tie(rhs.x, rhs.y);
    }
    friend bool operator < (const Point& lhs, const Point& rhs) {
        return std::tie(lhs.x, lhs.y) < std::tie(rhs.x, rhs.y);
    }

    friend bool operator !=(const Point& lhs, const Point& rhs) {
        return !(lhs == rhs);
    }
    friend bool operator > (const Point& lhs, const Point& rhs) {
        return rhs < lhs;
    }
    friend bool operator <=(const Point& lhs, const Point& rhs) {
        return !(lhs > rhs);
    }
    friend bool operator >=(const Point& lhs, const Point& rhs) {
        return !(lhs < rhs);
    }

};

主要的两个操作符,通过使用元组封装比较来实现,其他的四个可以根据这两个进行组合实现。

元组由C++17提供标准支持。

如果你的开发环境支持C++20,那么重载运算符将会变得非常简单。

struct Point {
    int x; int y;
    friend auto operator <=> (const Point& lhs, const Point& rhs) = default;
    
};

20提供了三路比较运算符,只需要声明一个就可以实现上面的六种运算符的功能。 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值