对一个调用函数的对象起作用?

时间:2015-05-04 16:43:26

标签: c++

所以说我用它来创建一个对象:

MyClass myObject;

我在类中使用了函数来处理对象。所以一种方法可能是使用参数,如:

MyClass foo(MyClass a) {
return a;
}

似乎很简单。但有没有办法让我可以使用myObject.foo(),即使我没有使用它作为参数,它仍会返回a?一个示例可能是std::string中的一些方法 - 您可以使用std::string.swap(),使用swap()函数的对象。

有办法吗,还是我傻了?

3 个答案:

答案 0 :(得分:1)

首先,请记住您的原始代码

WITH all_results AS (

  SELECT t1.*, 
         1 priority
  FROM   CUSTOMER_TABLE t1
  WHERE  NUM_CIN = ... 

  UNION 

  SELECT t2.*,
         2 priority 
  FROM   CUSTOMER_TABLE t2
  WHERE  NUM_PASS = ...

  UNION 

  SELECT t3.*, 
         3 priority
  FROM   CUSTOMER_TABLE t3
  WHERE  NAME = ... AND BIRTHDATE = ...

  UNION 

  SELECT t4.*,
         4 priority
  FROM   CUSTOMER_TABLE t4
  WHERE  NAME = ...

)

SELECT *
FROM   all_results
WHERE  priority = (SELECT min(priority) FROM all_results)

实际上并没有返回>>> zip(option_title, option_frequency) >>> [('attack', 0), ('defend', 0), ('coattack', 0), ('codefend', 0)] 。它返回{em} MyClass foo(MyClass a) { return a; } 的副本,它本身就是您传入foo的MyClass实例的副本。如果你想传入一个给定的对象,对它进行操作并返回它,你需要使用引用,如此

a

这将确保你从foo调用回来的a是你传递给它的完全相同的对象。

此外,对象总是可以在其中一个成员中返回对自身的引用...

a

这在您可能希望将大量操作链接在一起的类中特别有用......

MyClass & foo(MyClass & a) {
  return a;
}

答案 1 :(得分:1)

在每个成员函数中都有一个神奇的秘密参数,它是指向调用该方法的对象的指针,参数的名称是this

MyClass& foo() { //returns reference to existing MyClass instead of making copies
    this->print(); //call a different member
    return *this;  //return a reference to itself. Common for `operator=` and such.
}

答案 2 :(得分:0)

在类的(非static)成员函数中,您可以使用*this来命名调用该函数的对象。

所以:

MyClass MyClass::foo() {
    return *this;
}

(请注意,函数会返回对象的副本。如果您不想要副本,请使用@ Jherico的答案中的引用。)