私はC++を初めて使用しており、次の設計を実現しようとしています。C++の派生クラスの引数として親クラスの参照を渡す
class A { do(); doMore(); } // abstract
class B { do(); doMore(); } // abstract
class X : public A, public B // Also abstract
{
foo() {
// common code
A::do();
A::doMore();
}
bar() {
// common code
B::do();
B::doMore();
}
}
AとBの両方がdo()
とdoMore()
の実装を提供します。 新しい関数が、正しい親クラスのメソッドを呼び出すargをとる共通コードを抽出するにはどうすればよいですか?
X::newMethod(arg_that_indicates_parent_class) {
// common code
arg_that_indicates_parent_class::do();
arg_that_indicates_parent_class::doMore();
}
よう
何かがその後、実行時ポリモーフィズムのように見えますが、ではないそれほど
newMethod(pass_A_somehow);
newMethod(pass_B_somehow);
のようにそれを呼び出す(またはそれがある?)...それは子クラス内にあるとして。 ..
このデザイン自体はゴミ箱になっていますか?これを実現するにはより良い方法がありますか?
'common code()'は、おそらくそれを置く最良の方法ではありませんでした。私はちょうど簡潔にするためにそれを置く。共通コードは、実際には 'do()'と 'doMore()'の呼び出しの周りにあります。あなたの2番目の提案は有望に見えます。私はそれをショットを与えるよ! – user2624119