通过set / get方法修改类

时间:2019-02-06 13:34:56

标签: c++ class const

试图通过get / set方法修改类中的对象。我不明白如何仅使用get / set方法更改值。

预期输出:“输出:89”。

实际输出:“输出:0”

#include<iostream>

using namespace std;

class TestClass{
public:
    int getValue() const{
        return _value;
    }

    void setValue(int value) {
        _value = value;
    }

private:

    int _value;
};

class A{
public:
    TestClass getTestClass() const{
        return _testClass;
    }

    void setTestClass(TestClass testClass) {
        _testClass = testClass;
    }

private:
    TestClass _testClass;
};

int main()
{

    A a;

    a.getTestClass().setValue(89);

    cout<<"Output :"<<a.getTestClass().getValue();

}

2 个答案:

答案 0 :(得分:0)

您将返回_testClass的副本。因此,当您使用setValue(89)对其进行修改时,什么也不会发生,因为您只修改了在行尾丢弃的副本。相反,您应该返回引用。

在此处更改:

TestClass getTestClass() const{

对此:

TestClass &getTestClass() {

您将获得预期的输出。

答案 1 :(得分:0)

替换

TestClass getTestClass() const{
    return _testClass;
}

使用

TestClass& getTestClass() {
    return _testClass;
}

您要返回一个reference,否则您将返回该变量的副本。但是请记住,返回(非const)对类的成员变量的引用不是一种好的设计方法。

一些事情:

  • 请不要使用using namespace std;-请阅读here原因。

  • 请不要命名您的变量_testClass-改为使用m_testClass。您可以阅读hear有关的推理。