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
の継承に単純に追加すると、 で解決されます。I
B
A::X()
I::X()
C
ただし、のソースを変更することはできませんB
。
私の質問:変更できずにA::X()
解決I::X
できますか? 私は宣言して仮想化しようとしましたが、役に立ちませんでした。冗長なコードを持たないようにしています (たとえば、C に X() { A::X(); } を宣言させます)。きちんとしたハックはありますか?C
B
A
B
C
virtual
また、これと非常によく似た質問がいくつかありますが、継承の使用について話しているものは見つかりませんでした。私がそれを逃した場合は、私に指摘してください。