Ну, если вы действительно хотите знать, возможно ли это: так и есть. public
, protected
и private
являются только проверками времени компиляции. Один из возможных вариантов их обхода во время выполнения:
#include <iostream>
class A{
int x;
A() : x(10){}
};
struct pubA{
int x;
};
int main(){
A a;
// evil casting
pubA* pa = reinterpret_cast<A*>(&a);
std::cout << pa->x << std::endl; // should print 10
}
Тем не менее, не делай этого . Есть причина для этих ключевых слов. (Приведенный выше код не проверен, потому что я пишу с моего iPod. Если reinterpret_cast
не работает, используйте старое приведение в стиле C: pa = (pubA*)&a
.)