C++ 对调用函数的对象执行操作?

C++ 对调用函数的对象执行操作?,c++,C++,假设我用这个来创建一个对象: MyClass myObject; 我在类中有作用于对象的函数。一种方法是使用参数,如下所示: MyClass foo(MyClass a) { return a; } 看起来很简单。但是有没有一种方法可以让我使用myObject.foo(),它仍然会返回a,即使我没有将其用作参数?一个例子是std::string中的一些方法-您可以使用std::string.swap(),将对象用于swap()函数 有什么办法吗,还是我太傻了?首先,请记住,您是 MyClas

假设我用这个来创建一个对象:

MyClass myObject;
我在类中有作用于对象的函数。一种方法是使用参数,如下所示:

MyClass foo(MyClass a) {
return a;
}
看起来很简单。但是有没有一种方法可以让我使用
myObject.foo()
,它仍然会返回
a
,即使我没有将其用作参数?一个例子是
std::string
中的一些方法-您可以使用
std::string.swap()
,将对象用于
swap()
函数


有什么办法吗,还是我太傻了?

首先,请记住,您是

MyClass foo(MyClass a) {
  return a;
}
实际上不返回
a
。它返回
a
的副本,它本身就是传递到foo中的MyClass实例的副本。如果要传入给定对象,对其执行操作并返回它,则需要使用引用,如下所示

MyClass & foo(MyClass & a) {
  return a;
}
这将确保从对foo的调用中返回的a与传递给它的对象完全相同

此外,对象始终可以在其成员之一中返回对自身的引用

class MyClass { 
  MyClass & foo() { return *this; }
}
这在您可能希望将大量操作链接在一起的类中特别有用

MyClass my = MyClass().foo().bar("Hello").baz(5);

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

MyClass foo(MyClass a) {
  return a;
}
实际上不返回
a
。它返回
a
的副本,它本身就是传递到foo中的MyClass实例的副本。如果要传入给定对象,对其执行操作并返回它,则需要使用引用,如下所示

MyClass & foo(MyClass & a) {
  return a;
}
这将确保从对foo的调用中返回的a与传递给它的对象完全相同

此外,对象始终可以在其成员之一中返回对自身的引用

class MyClass { 
  MyClass & foo() { return *this; }
}
这在您可能希望将大量操作链接在一起的类中特别有用

MyClass my = MyClass().foo().bar("Hello").baz(5);

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

MyClass foo(MyClass a) {
  return a;
}
实际上不返回
a
。它返回
a
的副本,它本身就是传递到foo中的MyClass实例的副本。如果要传入给定对象,对其执行操作并返回它,则需要使用引用,如下所示

MyClass & foo(MyClass & a) {
  return a;
}
这将确保从对foo的调用中返回的a与传递给它的对象完全相同

此外,对象始终可以在其成员之一中返回对自身的引用

class MyClass { 
  MyClass & foo() { return *this; }
}
这在您可能希望将大量操作链接在一起的类中特别有用

MyClass my = MyClass().foo().bar("Hello").baz(5);

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

MyClass foo(MyClass a) {
  return a;
}
实际上不返回
a
。它返回
a
的副本,它本身就是传递到foo中的MyClass实例的副本。如果要传入给定对象,对其执行操作并返回它,则需要使用引用,如下所示

MyClass & foo(MyClass & a) {
  return a;
}
这将确保从对foo的调用中返回的a与传递给它的对象完全相同

此外,对象始终可以在其成员之一中返回对自身的引用

class MyClass { 
  MyClass & foo() { return *this; }
}
这在您可能希望将大量操作链接在一起的类中特别有用

MyClass my = MyClass().foo().bar("Hello").baz(5);

在每个成员函数中都有一个神奇的秘密参数,它是指向调用其方法的对象的指针,该参数的名称是
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.
}

在每个成员函数中都有一个神奇的秘密参数,它是指向调用其方法的对象的指针,该参数的名称是
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.
}

在每个成员函数中都有一个神奇的秘密参数,它是指向调用其方法的对象的指针,该参数的名称是
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.
}

在每个成员函数中都有一个神奇的秘密参数,它是指向调用其方法的对象的指针,该参数的名称是
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.
}
在类的(非
静态
)成员函数中,可以使用
*this
来命名调用该函数的对象

因此:

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

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

因此:

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

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

因此:

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

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

因此:


(注意函数返回对象的副本。如果你不想要一个拷贝,使用一个引用,如JJeReo的答案)

也许不愚蠢,但当然不清楚。真的,最好读一些C++书籍,而不是在这里问这样的问题。C++是一种复杂的语言,你不能通过提问来学习它……通过接受一个answer@anxieux是的,我现在正在努力完成一部分(“简单步骤”系列),我还没有看到任何与此相关的东西,所以我想我可能会问。也许不愚蠢,但肯定不清楚。真的,最好读一些C++书籍,而不是在这里问这样的问题。C++是一种复杂的语言,你不能通过提问来学习它……通过接受一个answer@anxieux是的,我现在正在努力完成一部分(“简单步骤”系列),我还没有看到任何与此相关的东西,所以我想我可能会问。也许不愚蠢,但肯定不清楚。真的,最好读一些C++书籍,而不是在这里问这样的问题。C++是一种复杂的语言,你不能通过提问来学习它……通过接受一个answer@anxi