如果我有以下类:
我理解这个代码为什么能够运行,但是是否会有不良影响呢?编译器没有问题,也没有运行时检查。
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;
我理解这个代码为什么能够运行,但是是否会有不良影响呢?编译器没有问题,也没有运行时检查。