c++ - 需要帮助理解 C++ 中的组合和类函数

标签 c++

我刚刚开始学习 C++,需要帮助理解这些类和函数之间发生了什么。如果 A 类有一个 B 类,如果我通过 A 类为 B 类使用 setter,则不会发生任何变化。

如果我直接使用 classB setter,它工作得很好。我还发现,如果使用指针,我可以使这些函数正常工作,但我正在寻求理解为什么这不起作用。

#include <iostream>

ClassA
{
private:
    ClassB test;
public:
    ClassB getTest(){return test;}
};

ClassB
{
private:
    int a = 10;
public:
    int getA(){return a;}
    void setA(int b){a += b;}
};

int main()
{
    ClassA myClass;
    myClass.getTest().setA(20);
    std::cout << myClass.getTest().getA(); // Will return 10 still
}

我的想法是这会将测试中的 int a 修改为 30,但事实并非如此,int a 仍为 10。

最佳答案

ClassB getTest(){return test;}

这将返回测试拷贝。您修改拷贝,而不是成员 test 本身。因此稍后您会发现 test 没有任何变化。

要允许用户修改,需要通过引用返回:

ClassB& getTest(){return test;}

关于c++ - 需要帮助理解 C++ 中的组合和类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54730027/

相关文章:

c++ - Debug模式自发关闭?

c++ - 两个不同的库使用相同的名称类型

c++ - 使用 GTK 和 C++ 播放音频文件

c++ - 具有模板的构造函数特化

c++ - 没有函数指针参数的隐式向上转换?

c++ - 如何允许 64 位 Windows 上的 32 位应用程序执行 Windows\System32 中提供的 64 位应用程序

c++ - Opencv 2.4.12_2 calcOpticalFlowPyrLK() 错误

c++ - 游戏 vs 游戏引擎?

c++ - Outlook IMAP 完成电子邮件和附件下载事件

c++ - 转换 Eigen 矩阵类型时,错误 : expected primary-expression before ‘float’