【发布时间】:2019-03-31 22:15:30
【问题描述】:
Fraction& Fraction::operator= (const Fraction &fraction)
{
// do the copy
m_numerator = fraction.m_numerator;
m_denominator = fraction.m_denominator;
return *this;
}
int main()
{
Fraction fiveThirds(5, 3);
Fraction f;
f = fiveThirds; // calls overloaded assignment
std::cout << f;
return 0;
}
在重载赋值运算符时,return this 的概念有些问题。
主函数中f = fiveThirds会调用赋值运算符,它会返回*this,即返回一个Fraction对象!
问题是f = fiveThirds 会返回对象,但是没有任何 Fraction 对象可以接收它!
在赋值链中,x=y=z、y=z 将返回一个对象 (k),该对象将被分配给 x,但 x=k 也将返回一个对象,所以谁收到了这个对象?
我已尽力描述我的问题。
【问题讨论】:
-
没有人收到,为什么会出现这个问题?如果您想知道为什么会有
return *this;,请尝试编写一个重载的operator=并返回void。然后编写代码a = b = c;,看看会发生什么。 -
为什么你认为它与返回
int的int foo()有什么不同,但是当它被调用而不将结果分配给任何变量时?
标签: c++ operator-overloading this-pointer