【问题标题】:"return *this" assignment operator overloading"return *this" 赋值运算符重载
【发布时间】: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=zy=z 将返回一个对象 (k),该对象将被分配给 x,但 x=k 也将返回一个对象,所以谁收到了这个对象?

我已尽力描述我的问题。

【问题讨论】:

  • 没有人收到,为什么会出现这个问题?如果您想知道为什么会有 return *this;,请尝试编写一个重载的 operator= 并返回 void。然后编写代码a = b = c;,看看会发生什么。
  • 为什么你认为它与返回 intint foo() 有什么不同,但是当它被调用而不将结果分配给任何变量时?

标签: c++ operator-overloading this-pointer


【解决方案1】:

问题是 f = FiveThirds 会返回对象,但是没有任何 Fraction 对象可以接收它!

更准确地说,它返回一个对象的引用。

那么谁会收到这个对象?

返回值被丢弃。

没有问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-30
    • 2013-02-14
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-13
    • 2011-03-06
    相关资源
    最近更新 更多