C++ 通过getter获得私人价值

C++ Getting private value with getter

本文关键字:通过 getter C++      更新时间:2023-10-16

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

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++ 面向对象编程的新手,无法找出执行此操作的最佳方法。

std::string Get_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);}

为了获取私有值,通常会实现一个公共 get 函数。

你想要设置值 - 通常为此任务实现一个公共设置函数:

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

或者实现 Getter 作为返回引用,正如来自莫斯科的 Vlad 所说。