0

Base、A、および B クラスを持つダイアモンド内にあるクラス C があります。メソッド Base::foo() があり、クラス A と B の両方でオーバーライドされます。C::foo を呼び出すと、 ()、A::foo() ではなく、B::foo() を呼び出したい。

これを行う方法の 1 つは、A を Base から仮想的に継承させ、B を通常どおり継承させることであると主張しています。そうすれば、C::foo() を再実装することなくこれを実現できます。

ただし、Base の 2 つのコピーが作成されるのを避けるために、A と B の両方を仮想として宣言する必要があるように思われるため、これが可能かどうかに関する他の情報は見つかりませんでした。

提案されたソリューションは正しいですか?

4

1 に答える 1

0

次のように明示的に定義C::foo()します。

C::foo() {
  B::foo();
}
于 2013-10-14T05:14:44.170 に答える