我被告知不要在类中公开我的变量。我应该总是创建一个 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++ 编程风格吗?
主要原因是增加封装性。如果您的类公开这些成员变量,则客户端代码中的许多函数将依赖于这些变量。
假设有一天您想要更改这些变量的名称,或者您想要更改类的实现,以便成员变量的类型和数量与当前的不同:有多少函数会受到此更改的影响?您需要重写(至少部分)多少个函数?
没错,可能是无限的。你就是无法全部数出来。另一方面,如果您有 getter 和 setter,则只有这 4 个函数才能访问您的类的内部表示。更改内部表示不需要对客户端函数的代码进行任何更改;只有这 4 个成员函数可能需要更改。
一般来说,封装可以让您的生活在未来的变化中变得更加轻松。在某个时间点,您可能希望在每次设置某个属性时记录一条消息。您可能希望在每次设置某个属性时触发一个事件。您可能希望动态计算某个值,而不是每次都从缓存数据成员中读取它,或者从数据库中读取它,或者其他什么。
有了 getter 和 setter,您就可以实现任何这些更改,而无需更改客户端代码。