【发布时间】:2013-03-05 05:47:58
【问题描述】:
如果我有以下课程:
class Foo
{
protected:
int i;
public:
Foo() : i(42) {}
};
当然,我无法从外部访问受保护的成员,但我可以做这个小技巧:首先我创建一个继承 Foo 的新类:
class Foo2 : public Foo
{
public:
int GetI() { return i; }
};
现在,只要我有 Foo 的实例或指向此类实例的指针,我就可以通过强制转换访问受保护的成员(因为我不使用任何其他成员):
Foo *f = new Foo();
Foo f2;
std::cout << ((Foo2*)f)->GetI() << std::endl;
std::cout << (reinterpret_cast<Foo2&>(f2)).GetI() << std::endl;
我明白为什么会这样,但会不会有任何不良后果?编译器不介意,没有任何运行时检查。
【问题讨论】:
标签: c++