我正在尝试 C++ 中 private
访问说明符的有效性。如下:
界面:
// class_A.h
class A
{
public:
void printX();
private:
void actualPrintX();
int x;
};
实现:
// class_A.cpp
void A::printX()
{
actualPrintX();
}
void A::actualPrintX()
{
std::cout << x:
}
我将它内置到静态库 (.a/.lib) 中。我们现在有一个 class_A.h 和 classA.a(或 classA.lib)对。 我编辑了 class_A.h 并从中删除了 private:
。
现在在另一个 classTester.cpp 中:
#include "class_A.h" // the newly edited header
int main()
{
A a;
a.x = 12; // both G++ and VC++ allowed this!
a.printX(); // allowed, as expected
a.actualPrintX(); // allowed by G++, VC++ gave a unresolved linker error
return 0;
}
我知道在篡改库的标题后,所有的赌注都被取消了(我的意思是,系统完整性等)尽管方法很老套,但这真的允许吗?有没有办法阻止这个?还是我在这里做错了什么?
最佳答案
private
不是一种安全机制。这是一种传达意图和隐藏程序其他部分不需要知道的信息的方式,从而降低了整体复杂性。
拥有两个不同的头文件不符合标准,因此从技术上讲,您进入了未定义的行为领域,但实际上,正如您所发现的,大多数编译器不会在意。
关于C++ 私有(private)真的是私有(private)的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2273091/