C++ 为什么在处理类时应该使用 get 和 set 函数

Dav*_*log 0 c++ class

我被告知不要在类中公开我的变量。我应该总是创建一个 get 和 set 函数。例如 :

class Whatever
{

public:
  void setSentence(const std::string &str) { sentence = str; }
  void setAnInteger(const int integer) { anInteger = integer; }

  std::string getSentence() { return sentence; }
  int getAnInteger() { return anInteger; }

private:
  std::string sentence;
  int anInteger;

};
Run Code Online (Sandbox Code Playgroud)

我为什么要那么做?仅仅使用这些变量不是更方便吗?另外,这是一种很好的 C++ 编程风格吗?

And*_*owl 6

主要原因是增加封装性。如果您的类公开这些成员变量,则客户端代码中的许多函数将依赖于这些变量。

假设有一天您想要更改这些变量的名称,或者您想要更改类的实现,以便成员变量的类型和数量与当前的不同:有多少函数会受到此更改的影响?您需要重写(至少部分)多少个函数?

没错,可能是无限的。你就是无法全部数出来。另一方面,如果您有 getter 和 setter,则只有这 4 个函数才能访问您的类的内部表示。更改内部表示不需要对客户端函数的代码进行任何更改;只有这 4 个成员函数可能需要更改。

一般来说,封装可以让您的生活在未来的变化中变得更加轻松。在某个时间点,您可能希望在每次设置某个属性时记录一条消息。您可能希望在每次设置某个属性时触发一个事件。您可能希望动态计算某个值,而不是每次都从缓存数据成员中读取它,或者从数据库中读取它,或者其他什么。

有了 getter 和 setter,您就可以实现任何这些更改,而无需更改客户端代码。