如果我在 class 成员函数的定义中使用全局变量,是否违反了封装?

Is encapsulation violated, if I use a global variable in a class member function's definition?

我被要求解释什么是封装,我回答了 "bundling of data and functions that modify this data, is called encapsulation."

答案后面还有一个问题—"So, by your definition if I modify a global variable from a member function of a class then the encapsulation is violated."

回答是有道理。

我不确定我的解释是否错误或以下问题是否有效,我的回答是否正确。

谁能帮忙。

引用自wikipedia

In programming languages, encapsulation is used to refer to one of two related but distinct notions, and sometimes to the combination thereof:

  • A language mechanism for restricting access to some of the object's components.
  • A language construct that facilitates the bundling of data with the methods (or other functions) operating on that data

在我看来,后续问题的答案是主观的,它取决于对封装概念的解释。

比如封装数据仅限于类的成员变量,并不违规。每个人都可以访问不属于对象的全局变量,因此通过成员函数访问它不包含任何封装违规。

另一方面,如果您认为封装应该应用于整个程序,那么这个全局变量应该已经绑定到一个对象,因此,对它的原始访问构成封装违规。

归根结底,答案在于神学领域,这意味着它取决于不同的编程教条如何解释封装。

这取决于全局变量的定义和访问方式。

假设头文件包含声明,但不包含成员函数的定义,相应的实现文件包含 class 个成员实现。

现在将此头文件中定义的全局变量视为内部链接一(static)。或者放在未命名的命名空间中。它是一个全局变量,但在功能上它与 private static class 成员没有区别。

这是臭代码,但是,我说,那个变量 正确封装的: