鱼C论坛

 找回密码
 立即注册
查看: 1556|回复: 3

[已解决]C++ - 成员函数加&是什么意思?

[复制链接]
发表于 2023-4-21 11:56:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
class A
{
public:
  A& func1() {        //这是成员函还是构造函数?加&是什么意思?是引用吗?
  return *this;        //*this知道是什么意思,但返回值使用了*this后,会带来什么变化 ?
  }
}
最佳答案
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)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-22 10:01:17 | 显示全部楼层
这是一个成员函数,不是构造函数。

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

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

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

需要注意的是,如果在该函数中对当前对象进行了修改,那么返回引用后,调用者也会受到影响。因此,在编写这种返回对象引用的函数时,需要小心谨慎,避免产生意外的副作用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-23 12:59:20 | 显示全部楼层
isdkz 发表于 2023-4-21 12:06
在 C++ 中,成员函数后面加上 `&` 表示该函数返回类型是该类的引用。

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

A func1()是返回一个A类的数据类型吗?A是一个集成多种数据类型的类,但func1()只是一个函数,A是以什么形式作为一个函数成员的数据类型??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 15:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表