3

2 つの基本クラスから継承するクラスがあるとします (多重継承)。ベースclass Aは抽象的で、純粋な仮想関数を宣言しfoo、他のベースはまったく同じシグネチャのclass B関数を宣言および実装します。foo

struct A
{
  virtual void foo(int i) = 0;
};

struct B
{
  virtual void foo(int i) {}
};

struct C : public A, public B {};

派生したfoofrom baseの実装を使用したいと考えています。ただし、派生した関数をもう一度実装しないと、そのオブジェクトをインスタンス化できません (抽象化されたままです)。仮想継承は、ここでは予想どおり役に立ちません (また、共通の基本クラスがありません)。class Bclass Cfooclass Cclass Aclass B

同じコードを繰り返す必要がないように、foofromの実装を「インポート」する方法があるのだろうか。class Bclass C

上記の例はもちろんわざとです。fooで実装したい理由は、の実装class Bを派生させclass D : public Bて使用したいからです。継承が (主に) コードの再利用を目的としていないことはわかっていますが、それでもそのように使用したいと考えています。class Bfoo

4

1 に答える 1

2

Java では、サンプル コードが機能します。C++ ではそうではありません。それらの言語の微妙な違い。

C++ での最良のオプションは、B::foo() に転送して C::foo() を定義することです。

struct C : public A, public B
{
  virtual void foo(int i) { B::foo(i); }
};
于 2010-07-20T15:28:26.113 に答える