Comeapt 发表于 2023-4-21 11:56:58

C++ - 成员函数加&是什么意思?

class A
{
public:
A& func1() {      //这是成员函还是构造函数?加&是什么意思?是引用吗?
return *this;      //*this知道是什么意思,但返回值使用了*this后,会带来什么变化 ?
}
}

isdkz 发表于 2023-4-21 12:06:55

在 C++ 中,成员函数后面加上 `&` 表示该函数返回类型是该类的引用。

在你给出的例子中,`A& func1()` 是一个成员函数,它的返回类型是类 A 的引用。它不是构造函数,因为构造函数的名字应该与类名相同,并且构造函数没有返回类型。

当函数返回一个引用时,你可以在函数内部使用 `return *this;`。这里的 `*this` 是一个指向当前对象实例的指针的解引用。通过返回 `*this`,你可以实现链式调用,也就是说,可以连续调用多个成员函数,而不需要将每个成员函数的返回值分配给一个变量。

例如,假设有这样一个类:

class A {
public:
    A& setValue1(int value) {
      value1 = value;
      return *this;
    }

    A& setValue2(int value) {
      value2 = value;
      return *this;
    }

private:
    int value1;
    int value2;
};


你可以使用链式调用来设置这个类的值:

A obj;
obj.setValue1(10).setValue2(20);


在这个例子中,`setValue1` 和 `setValue2` 都返回 `A` 类型的引用,允许你在同一行代码中调用多个函数。这种编程风格有时被称为“流畅接口”(fluent interface)。

陶远航 发表于 2023-4-22 10:01:17

这是一个成员函数,不是构造函数。

`A&` 表示该函数返回一个 `A` 类型的引用,其中 `&` 表示引用。

在该函数中,`return *this;` 表示返回当前对象的引用。因为该函数返回的是引用,所以调用该函数后可以继续对该对象进行操作。

使用 `*this` 返回当前对象的引用,可以实现链式调用。例如,可以使用 `obj.func1().func2().func3();` 的方式依次调用 `func1()`、`func2()`、`func3()` 函数,从而实现代码的简洁性和可读性。

需要注意的是,如果在该函数中对当前对象进行了修改,那么返回引用后,调用者也会受到影响。因此,在编写这种返回对象引用的函数时,需要小心谨慎,避免产生意外的副作用。

Comeapt 发表于 2023-4-23 12:59:20

isdkz 发表于 2023-4-21 12:06
在 C++ 中,成员函数后面加上 `&` 表示该函数返回类型是该类的引用。

在你给出的例子中,`A& func1()`...

A func1()是返回一个A类的数据类型吗?A是一个集成多种数据类型的类,但func1()只是一个函数,A是以什么形式作为一个函数成员的数据类型??
页: [1]
查看完整版本: C++ - 成员函数加&是什么意思?