Я проверял допустимость 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:
.
Теперь в другом 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;
}
Я знаю, что после изменения заголовка библиотекивсе ставки сняты (я имею в виду, целостность системы и т. д.). Хотя метод хакерский, это действительно разрешено?Есть ли способ заблокировать это?Или я тут что-то не так делаю?