【问题标题】:Chaining function using 'this' pointer使用“this”指针的链接函数
【发布时间】:2016-05-06 04:34:47
【问题描述】:
#include<iostream>
using namespace std;

class Test
{
private:
    int x;
    int y;
public:
    Test (int x = 0, int y = 0) { this->x = x; this->y = y; }
    Test setX(int a) { x = a; return *this; }
    Test setY(int b) { y = b; return *this; }
    void print() { cout << "x = " << x << " y = " << y << endl; }
};

int main()
{
    Test obj1;
    obj1.setX(10).setY(20);
    obj1.print();
    return 0;
}

在这个程序中,如果我使用链接函数,x 和 y 的值是:x=10, y=0 而不是 x=10, y=20

如果不是链接函数,我使用: obj1.setX(10) 和 obj1.setY(20) 分别, x 值变为 10 y 值为 20。 谁能解释一下为什么会这样。

【问题讨论】:

  • 为我打印 10/20...你确定你不是吗?修改代码后运行错误的可执行文件?
  • 您的代码对我来说看起来不错。它也适用于我,使用 g++ 4.8.4。
  • 你有没有在这里添加的设置值的方法吗?无论你提出什么作品。
  • 按预期工作here。您确定不会忘记代码中设置器的返回类型中的引用吗?
  • 对不起,我把问题放错了...只是编辑了它....而不是以下内容:Test& setX(int a) { x = a;返回*这个; } 就是这个 Test setX(int a) { x = a;返回*这个; }

标签: c++ pointers this


【解决方案1】:

您的 set* 方法正在返回 Test 对象的副本。

因此,当您链接调用时,setY 将应用于临时副本,并被丢弃。

【讨论】:

    【解决方案2】:

    你可以返回一个对象的引用:

    Test &setX(int a) { x = a; return *this; }
    Test &setY(int b) { x = b; return *this; }
    

    或存储更改对象的副本:

    Test obj1;
    Test objCopy = obj1.setX(10).setY(20);
    objCopy.print();
    

    由于不复制对象,首先效率更高。

    【讨论】:

      猜你喜欢
      • 2014-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多