4つのクラスがあるとします:
class I { public: virtual void X() = 0; };
class A : public virtual I { public: virtual void X() { } };
class B : public I { };
class C : public A, public B { };
I、BおよびCは抽象的ですが、asAはそうではありません。forvirtualの継承に単純に追加すると、 で解決されます。IBA::X()I::X()C
ただし、のソースを変更することはできませんB。
私の質問:変更できずにA::X()解決I::Xできますか? 私は宣言して仮想化しようとしましたが、役に立ちませんでした。冗長なコードを持たないようにしています (たとえば、C に X() { A::X(); } を宣言させます)。きちんとしたハックはありますか?CBABC
virtualまた、これと非常によく似た質問がいくつかありますが、継承の使用について話しているものは見つかりませんでした。私がそれを逃した場合は、私に指摘してください。