【发布时间】:2012-06-13 03:05:58
【问题描述】:
是否可以在 C 中模拟 C++ 访问说明符 [public、private、protected]?更一般地说,C++ 编译器如何确保类的私有成员不被非成员函数访问?
【问题讨论】:
-
重点是什么?这些关键字用于指定面向对象环境中的方法行为。
-
C++ 编译器读取代码并保留在何处可见的列表。在 C 中对此进行仿真需要使用宏和预编译器进行一些工作,并考虑在 C 程序中私有化的实际含义。而且只能粗略估算。
-
@Michael:好奇。由于可以使用 func 指针和 vtables 在 C 中实现虚函数机制,从而模拟多态性,我想知道是否可以模拟封装。
-
在 C++ 中,访问说明符是类型系统的一部分。您必须在 C 中模拟 C++ 类型系统的这一方面。您将使用什么组合的预处理器和链接器魔法来完成这取决于您。在这里调用不透明类型是恕我直言。
-
封装的问题在于它并不是真正的强制执行,而只是一种阻止成员访问并使访问变得更加晦涩的方法。如果有人真的想这样做,它将能够违反 C++ 封装。正如人们所说的 Python 缺乏封装强制一样,“我们都是在这里长大的”。如果您将属性设计为私有,那么直接使用它的人必须知道他/她在做什么,并承担风险。