Effective C++ 条款24

Effective C++ 条款24

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

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

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

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函数。例如以下

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.net/116546.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【java并发编程】底层原理——用户态和内核态的区别

    【java并发编程】底层原理——用户态和内核态的区别一、背景–线程状态切换的代价java的线程是映射到操作系统原生线程之上的,如果要阻塞或唤醒一个线程就需要操作系统介入,需要在户态与核心态之间切换,这种切换会消耗大量的系统资源,因为用户态与内核态都有各自专用的内存空间,专用的寄存器等,用户态切换至内核态需要传递给许多变量、参数给内核,内核也需要保护好用户态在切换时的一些寄存器值、变量等,以便内核态调用结束后切换回用户态继续工作。synch…

    2026年1月18日
    7
  • c语言入门教程–-13数组

    c语言入门教程–-13数组

    2021年3月12日
    185
  • ac测评题库_awing

    ac测评题库_awing杭州人称那些傻乎乎粘嗒嗒的人为 62(音:laoer)。杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。不吉利的数字为所有含有 4 或 62 的号码。例如:62315,73418,88914 都属于不吉利号码。但是,61152 虽然含有 6 和 2,但不是 连号,所以不属于不吉利数字之列。你的任务是,对于每次给出的一个牌照号区间 [n,m],推断出交管局今后又要实际上给多少辆新的士车上牌

    2022年8月9日
    4
  • JMeter安装与接口测试入门[通俗易懂]

    JMeter安装与接口测试入门[通俗易懂]安装环境配置1、JDK版本:JDK1.8及以上;2、操作系统:JMeter可以在当前任何一个已经部署了Java的操作系统上运行,Unix(Solaris,Linux,etc)、Windows(98,NT,2000,XP,WIN7)、OpenVMSAlpha7.3+JDK安装与配置1、jdk安装:在官网下载jdk1.8版本压缩包,解压到指定文件夹即可。2、环境变量配置1)右键点击…

    2022年5月3日
    65
  • checkbox选中与取消选择[通俗易懂]

    checkbox选中与取消选择[通俗易懂]checkbox选中与取消选择1.html<form><inputtype="checkbox"name="items"value="足球"/>足球<inputtype="checkbox"name="items"value="篮球"/>篮球&

    2022年6月17日
    442
  • 身后的脚印

    身后的脚印

    2021年8月22日
    58

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号