изменение класса с помощью методов set / get - PullRequest
0 голосов
/ 06 февраля 2019

пытается изменить объект в классе с помощью методов 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 голосов
/ 06 февраля 2019

заменить

TestClass getTestClass() const{
    return _testClass;
}

на

TestClass& getTestClass() {
    return _testClass;
}

Вы хотите вернуть ссылку , в противном случае вы просто возвращаете копию переменной.Но имейте в виду, что возврат (неконстантной) ссылки на переменные-члены класса не является хорошим подходом к проектированию.

Некоторые вещи:

  • пожалуйста, не используйте using namespace std; - прочитайте здесь почему.

  • пожалуйста, не называйте свои переменные _testClass - используйте вместо m_testClass.Вы можете прочитать услышать о рассуждениях.

0 голосов
/ 06 февраля 2019

Вы возвращаете копию _testClass.Поэтому, когда вы изменяете его с помощью setValue(89), ничего не происходит, потому что вы изменяете только копию, которая отбрасывается в конце строки.Вместо этого вы должны вернуть ссылку.

Измените это здесь:

TestClass getTestClass() const{

На это:

TestClass &getTestClass() {

И вы получите ожидаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...