美文网首页
Effective c++ 学习笔记(item24)

Effective c++ 学习笔记(item24)

作者: 懒生活 | 来源:发表于2022-09-09 23:32 被阅读0次

item24的适用性不广。大部分时候是不建议使用隐式转换的。了解这个例子对设计类的运算操作符有帮助。运算操作符的实现可以考虑非成员函数实现。

```

class Fraction

{

public:

Fraction(int a, int b) : numerator(a), denominator(b){}

private:

int numerator; int denominator;

int main()

{

Fraction a(1,4);

Fraction ret1 = a*2;

Fraction ret2 = 2*a;

}

```

在编译到`Fraction ret1 = a*2;`的时候,编译器实际上编译的是`Fraction ret1=a.operator*(2)`; 如果找不到,它会进一步查`Fraction ret1 = operator*(a,2)` 在这个示例代码中,编译器都找不到,所以会报错。

为了解决这个问题,解决方法1,我们可以给Fraction类定义一个`operator*`,也可以定义一个非成员函数 `const Fraction operator*(const Fraction& lhs, const Fraction&rhs)` 本文推荐使用方式2。 因为方式2可以解决`Fraction ret2= 2* a;`的编译问题。

# 转换函数和操作符重载函数的区别

这里需要区别一下,转换函数和操作符的一些细微区别。 转换函数是不声明返回类型。但是确有return语句。参考隐式转换的学习部分。

相关文章

网友评论

      本文标题:Effective c++ 学习笔记(item24)

      本文链接:https://www.haomeiwen.com/subject/frajnrtx.html