<分区>
假设我们有这段代码
class A {
public:
A() : x(1) {}
virtual ~A() {}
int x;
};
class B {
public:
B() : y(2) {}
virtual ~B() {}
void g()
{
cout << "B::" << y << endl;
}
int y;
};
class C : private A, private B {
public:
void f()
{
B* p = static_cast<B*>( this );
p->g();
}
};
int main()
{
C c;
((B*)&c)->g();
return 0;
}
main 函数中的 C 风格转换无法用 C++ 转换(static_cast
、dynamic_cast
、reinterpret_cast
)正确表达。但是,首先允许这样做的原因是什么?不影响封装吗?
更新 这不是链接问题的重复,因为这个问题是关于 C++ 中的设计决策。它不问我能用语言做什么或不能做什么,而是问为什么做出某些决定。