如果我在 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 成员没有区别。
这是臭代码,但是,我说,那个变量 是 正确封装的:
我被要求解释什么是封装,我回答了 "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 成员没有区别。
这是臭代码,但是,我说,那个变量 是 正确封装的: