Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 封装与数据隐藏_C++_Oop - Fatal编程技术网

C++ 封装与数据隐藏

C++ 封装与数据隐藏,c++,oop,C++,Oop,封装是一种技术,通过这种技术,可以提供对隐藏数据(私有)进行操作并返回结果的函数(公共) 内部数据可以通过多种方式实现(bcoz隐藏),而不影响接口 这是否意味着封装与数据隐藏相同?你用谷歌搜索过吗 前几个答案是可以的: 选中此项: 数据隐藏是封装的一个极端版本,您不仅不希望用户访问数据成员,而且甚至不希望他们能够看到它们是什么。这通常是通过使用void指针或前向声明的结构指针作为类数据来实现的。您用谷歌搜索过吗 前几个答案是可以的: 选中此项: 数据隐藏是封装的一个极端版本,您不仅不希望用

封装是一种技术,通过这种技术,可以提供对隐藏数据(私有)进行操作并返回结果的函数(公共)

内部数据可以通过多种方式实现(bcoz隐藏),而不影响接口

这是否意味着封装与数据隐藏相同?

你用谷歌搜索过吗

前几个答案是可以的:

选中此项:

数据隐藏是封装的一个极端版本,您不仅不希望用户访问数据成员,而且甚至不希望他们能够看到它们是什么。这通常是通过使用void指针或前向声明的结构指针作为类数据来实现的。

您用谷歌搜索过吗

前几个答案是可以的:

选中此项:


数据隐藏是封装的一个极端版本,您不仅不希望用户访问数据成员,而且甚至不希望他们能够看到它们是什么。这通常是通过使用void指针或前向声明的结构指针作为类数据来实现的。

我不会这么说。封装更像是一种面向对象的习惯用法。它与您想要隐藏数据这一事实无关,而是控制数据的访问方式。仅仅因为某些数据是私有的,并不意味着它是隐藏的

想象一下,调试后无法看到私有成员

对于数据隐藏,可以使用其他技术,例如


在本例中,实际数据的大部分知识在实现中丢失,不是因为它是私有的,而是因为它是隐藏的。封装更像是一种面向对象的习惯用法。它与您想要隐藏数据这一事实无关,而是控制数据的访问方式。仅仅因为某些数据是私有的,并不意味着它是隐藏的

想象一下,调试后无法看到私有成员

对于数据隐藏,可以使用其他技术,例如


在这种情况下,实际数据的大部分知识在实现中丢失,不是因为它是私有的,而是因为它是隐藏的。

使用私有或受保护作为封装提供了一个保护外壳,但并不能完全隐藏实现

如果您更改了类的私有实现,您仍然需要重建所有使用它的类,这就是为什么人们使用“pImpl”和类似技术来完全隐藏实现细节

在C语言中,没有私有的或受保护的,但是用户通常会在前向声明的结构上创建一个实现,用户从来没有看到过(例如FILE*),甚至是void*指针,这些指针通常被定义为某种句柄类型

我会参考

我通常会说,通过private/public使用封装是一种较弱的抽象形式,数据隐藏是一种较强的抽象形式(如果抽象是隐藏实现细节的一个好词),但术语一直是我的弱点之一

然而,即使您打算使用pImpl或其他任何东西,您也不希望任何类或任何东西对实现细节做任何您喜欢的事情。通常有关于什么可以做什么的规则,这就是“封装”模型真正带来的

有些人认为friend破坏了封装,但实际上它可以增强封装,例如,让factory对象写入类的私有成员。工厂对象就像是建造你房子的建筑商,你让他们可以把所有东西放在正确的位置

如果您编写单元测试(您应该这样做),您也可以允许您的单元测试访问您的类的私有成员,以测试您的实现是否正确


因此,封装和数据(实现)隐藏都是好东西,应该以适当的方式使用。它们在分配角色时实现了类似的功能,但并不完全相同。

使用private或protected作为封装提供了一个保护外壳,但不会完全隐藏实现

如果您更改了类的私有实现,您仍然需要重建所有使用它的类,这就是为什么人们使用“pImpl”和类似技术来完全隐藏实现细节

在C语言中,没有私有的或受保护的,但是用户通常会在前向声明的结构上创建一个实现,用户从来没有看到过(例如FILE*),甚至是void*指针,这些指针通常被定义为某种句柄类型

我会参考

我通常会说,通过private/public使用封装是一种较弱的抽象形式,数据隐藏是一种较强的抽象形式(如果抽象是隐藏实现细节的一个好词),但术语一直是我的弱点之一

然而,即使您打算使用pImpl或其他任何东西,您也不希望任何类或任何东西对实现细节做任何您喜欢的事情。通常有关于什么可以做什么的规则,这就是“封装”模型真正带来的

有些人认为friend破坏了封装,但实际上它可以增强封装,例如,让factory对象写入类的私有成员。工厂对象就像是建造你房子的建筑商,你让他们可以把所有东西放在正确的位置

如果您编写单元测试(您应该这样做),您也可以允许您的单元测试访问您的类的私有成员,以测试您的实现是否正确


因此,封装和数据(实现)隐藏都是好东西,应该以适当的方式使用。他们在分配角色时取得了相似的效果,但并不完全相同。

只链接答案是不受欢迎的。你能解释一下论坛的主题吗