条款24:若所有参数皆需类型转换,请为此采用 non-member 函数

1.针对隐式转换的情况,可能会出现误用的情况

  • 示例代码
cpp 复制代码
#include <iostream>

class Rational
{
public:
    Rational(float iNum1 = 1, float iNum2 = 2) { fNum = iNum1 / iNum2; }
    ~Rational() {}
    //自定义逻辑
    const Rational operator * (const Rational& rhs) const{ return Rational(this->fNum, rhs.fNum);}

public:
    float fNum;
};

int main()
{
    Rational R1(1.0);
    Rational R2 = R1 * 2.0;
    Rational R3 = 3.0 * R2;
}

不符合类的设计逻辑

书中解释

2.解决:使用非成员函数来解决以上的问题

  • 示例代码
cpp 复制代码
#include <iostream>

class Rational
{
public:
    Rational(float iNum1 = 1, float iNum2 = 2) { fNum = iNum1 / iNum2; }
    ~Rational() {}

public:
    float fNum;
};

const Rational operator * (const Rational& r1, const Rational& r2)
{
    return Rational(r1.fNum, r2.fNum);
}

int main()
{
    Rational R1(1.0);
    Rational R2 = R1 * 2.0;
    Rational R3 = 3.0 * R2;
    std::cout << "end...................." << std::endl;
}
相关推荐
持梦远方1 分钟前
【C++日志库】启程者团队开源:轻量级高性能VoyLog日志库完全指南
开发语言·c++·visual studio
聪明努力的积极向上1 分钟前
【C#】HTTP中URL编码方式解析
开发语言·http·c#
嵌入式-老费22 分钟前
自己动手写深度学习框架(快速学习python和关联库)
开发语言·python·学习
ctgu9028 分钟前
PyQt5(八):ui设置为可以手动随意拉伸功能
开发语言·qt·ui
许长安32 分钟前
C++中指针和引用的区别
c++·经验分享·笔记
CVer儿36 分钟前
libtorch ITK 部署 nnUNetV2 模型
开发语言
asyxchenchong8881 小时前
OpenLCA、GREET、R语言的生命周期评价方法、模型构建
开发语言·r语言
没有梦想的咸鱼185-1037-16631 小时前
【生命周期评价(LCA)】基于OpenLCA、GREET、R语言的生命周期评价方法、模型构建
开发语言·数据分析·r语言
hetao17338371 小时前
2025-10-30 ZYZOJ Star(斯达)模拟赛 hetao1733837的record
c++·算法
程序猿20232 小时前
Python每日一练---第三天:删除有序数组中的重复项
开发语言·python