gpt4 book ai didi

c++ - C++ 中的运算符重载(有和没有 friend )

转载 作者:行者123 更新时间:2023-11-28 01:10:10 24 4
gpt4 key购买 nike

嘿,我想知道这两个运算符定义之间的区别:

1:

class Rational{
//...
public:
//...
Rational operator -() const{ return Rational(-t,b);}
//...
};

2:

class Rational{
//...
public:
//...
friend Rational operator -(const Rational& v) {return Rational(-t,b);}
//...
};

据我所知,用于:

Rational s = -r 

r.operator-() // should happen

想要对差异进行一些解释,谢谢!

最佳答案

在大多数情况下,它们是相同的。

首先,我认为你没有写对。它们应该是:

 // Member function.      "-r" calls r.operator-() 
Rational Rational::operator -() const{ return Rational(-t,b);}

// (technically a) global function. "-r" calls ::operator-(r)
friend Rational operator -(const Rational& v) {return Rational(-v.t,v.b);}

主要区别在于,如果您有另一种可转换为 Rational 对象的类型(比如 MyRational),那么:

  MyRational mr = MyRational();
Rational r = -mr;

将适用于第二个定义,但不适用于第一个。

关于c++ - C++ 中的运算符重载(有和没有 friend ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3833431/

24 4 0
文章推荐: html - CSS 动画移动位置与变换
文章推荐: javascript - 点击ajax中的链接不起作用
文章推荐: html - 延迟加载在图像下留下巨大的空白 - CSS 高度问题
文章推荐: javascript - 使用 Javascript 或 Jquery 获取