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

时间:2016-03-05 18:49:16

标签: c++ encapsulation

我被要求解释什么是封装,我回答说“捆绑修改这些数据的数据和函数,称为封装。”

答案之后是另一个问题 - “因此,根据您的定义,如果我从类的成员函数修改全局变量,则会违反封装。”

回答“是”是有意义的。

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

有人可以提供帮助。

2 个答案:

答案 0 :(得分:1)

引自wikipedia

  

在编程语言中,封装用于指代两种中的一种   相关但不同的概念,有时是组合   物:

     
      
  • 用于限制对某些对象组件的访问的语言机制。
  •   
  • 一种语言结构,有助于将数据与对该数据进行操作的方法(或其他功能)进行捆绑
  •   

以我的拙见,后续问题的答案是主观的,这取决于对封装概念的解释。

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

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

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

答案 1 :(得分:1)

这取决于如何定义和访问全局变量。

想象一下包含声明的头文件,但不包含成员函数的定义,以及包含类成员实现的相应实现文件。

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

这是有臭味的代码,但是,我说,变量正确封装了: