具象クラス A と抽象クラス B があるとします。
A と B の両方から継承し、B を実装する具体的な C を考えてみましょう。
class C : public A, public B
{
/* implementation of B and specific stuff that belongs to C */
};
今、私は署名である関数を定義しますvoid foo(B* b);
これは私のコードです。B へのすべてのポインターは A と B の両方であると想定できます。foo の定義では、A へのポインターを取得する方法は? 厄介だが有効なトリックは、次のようにポインターを後方に揃えることです。
void foo(B* b)
{
A* a = reinterpret_cast<A*>(reinterpret_cast<char*>(b) - sizeof(A));
// now I can use all the stuff from A
}
Cにはスーパータイプがなく、実際にはCに似た多くのクラスがあり、それらはAとBのみであることに注意してください。私のロジックとこの設計サンプルの両方に自由に質問してください。ただし、質問はポインターの配置のみに関するものです.