首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Effective C++ 条款24

Effective C++ 条款24

作者头像
全栈程序员站长
发布2022-01-20 09:27:44
发布2022-01-20 09:27:44
3470
举报

大家好,又见面了,我是全栈君。

若全部參数皆需类型转换,请为此採用non-member函数

我们直奔主题 假设你定义一个有理数类例如以下

代码语言:javascript
复制
class Rational{
public:
    Rational(int numerator=0, int denominator=1);//非explicit。同意隐式转换
    const Rational operator*(const Rational& rhs);  
    .......................
};

result=oneHalf*2;//正确。相当于oneHalf.operator*(2);
result=2*oneHalf;//错误,相当于2.operator*(oneHalf);

我们能够看到result=2*oneHalf;这句无法通过编译,由于编译器找不多这样一个函数。那为什么result=oneHalf*2;这句话能通过编译?这是由于此时的类Rational能够进行隐式转换。

为了能运行result=2*oneHalf;这句,我们能够定义一个非member函数。例如以下

代码语言:javascript
复制
const Rational operator*(const Rational& lhs, const Rational& rhs);
result=oneHalf*2;//正确。相当于operator*(oneHalf,Rational temp(2));
result=2*oneHalf;//正确,相当于operator*(Rational temp(2),oneHalf);

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/116546.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 若全部參数皆需类型转换,请为此採用non-member函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档