このコードがあるとしましょう
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;
}
static_cast
main 関数の C スタイル キャストは、C++ キャスト ( 、dynamic_cast
、 )では正しく表現できませんreinterpret_cast
。しかし、そもそもこれを許可する理由は何ですか?カプセル化に害はありませんか?
更新 この質問はC++での設計上の決定に関するものであるため、これはリンクされた質問の複製ではありません。その言語で何ができるか、何ができないかではなく、特定の決定が下された理由を尋ねます。