private
C++ でアクセス指定子の妥当性を試していました。ここに行きます:
インターフェース:
// 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:
ました。
今別のクラスTester.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;
}
ライブラリのヘッダーを改ざんした後、すべての賭けがオフになることを知っています (つまり、システムの整合性など)。メソッドはハックされていますが、これは本当に許可されていますか? これをブロックする方法はありますか?それとも、ここで何か間違ったことをしていますか?