我正在尝试验证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;
}
我知道在篡改库的头文件之后,一切都无法预测(我是指系统的完整性等)。虽然这种方法很土,但这真的被允许吗?有没有办法阻止这种情况发生?还是说我在做错了什么?