所以说我用它来创建一个对象:
MyClass myObject;
我在类中使用了函数来处理对象。所以一种方法可能是使用参数,如:
MyClass foo(MyClass a) {
return a;
}
似乎很简单。但有没有办法让我可以使用myObject.foo()
,即使我没有使用它作为参数,它仍会返回a
?一个示例可能是std::string
中的一些方法 - 您可以使用std::string.swap()
,使用swap()
函数的对象。
有办法吗,还是我傻了?
答案 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的答案中的引用。)