C ++使用getter获取私有值

时间:2014-12-03 21:54:17

标签: c++ getter private-members

我有一个私人和公共成员的课程我正在尝试使用getter Get_Words()来访问私有单词成员。这个都是编译但是来自dir[NORTH].Get_Words() = "NORTH";时的值每当这个单词只是一个没有使用dir[NORTh].word = "NORTH";的Get_Words()成员函数的公共函数时 为什么Get_Words没有正确地将值分配给word?

class Words
{
  public:
    static void Set_Words();
    string Get_Words();
  private:
    string word;
}

string Word::Get_Words()
{
  return word;
}

...
dir[NORTH].Get_Word() = "NORTH";

我也试过

dir[NORTH].Get_Word() = Set_Word( string "North");

我很确定我做错了,但我是c ++中面向对象编程的新手,无法找到最好的方法。

2 个答案:

答案 0 :(得分:2)

std::string Get_Word()按值返回,也就是说它会复制该单词并将其返回。当您尝试分配给它时,您试图分配到右手参考,这是不可能的。

解决这个问题的方法是返回对word的引用:

std::string& Get_Word();

但这通常被认为是不好的做法,因为参考可以超过班级。更好的方法是在吸气剂旁边提供一个设定器:

 void Set_Word(const std::string& w) {word=w;}

甚至更好:

 template <typename T>
 void Set_Word(T&& w) {word=std::foreward<T>(w);}

答案 1 :(得分:0)

要获取私有值,通常会实现公共get函数。

您想要设置值 - 通常为此任务实现公共集函数:

void Set_Word(string& newValue) { ... }

或者实施Getter作为返回参考,正如来自莫斯科的Vlad所说。