多重継承で派生クラス関数から適切な親クラス関数を呼び出す

user3286661

次のクラスがあるとします。

class Base {
  virtual void func() { cout << "func base" << endl; }
};

class A : virtual public Base {
  public:
  virtual void func() { cout << "func A" << endl; }
};

class B : virtual public Base {
  public:
  virtual void func() { cout << "func B" << endl; }
};

class C : public A, public B {
  C(bool is_a);
  public:
  virtual void func() { // Call appropriate parent's func here }
};

私の要件は、func()Cを呼び出すときに適切な親クラスの関数を呼び出すことfunc()です。これは私が適切に意味するものです:

Base* ptr = new C(true /*is_a*/);
ptr->func(); // This should call A's func internally

これを達成する方法は?それも可能ですか?

[編集]

これは、設計上の問題である可能性があります。クラスCには、真の親(AまたはB)が1つしかないことが知られています。そして、どちらが親であるかに応じて、その関数を呼び出したいと思います。代替の設計提案は大歓迎です。

AとBの両方が共有し、基本クラスの一部にはできない共通の機能がいくつかあるため、AとBからCを派生させています。

アコンカグア

これは、設計上の問題である可能性があります。クラスCには、真の親(AまたはB)が1つしかないことが知られています。そして、どちらが親であるかに応じて、その関数を呼び出したいと思います。代替の設計提案は大歓迎です。

class Base { };
class A : public Base { };
class B : public Base { };
class C
{
    // common interface for all types of C
};

class C_A : public A, public C { };
class C_B : public B, public C { };

これでC_AC必要に応じてAC_B同様に動作する必要がある場所で、を使用できます...

上記の例では、すべての仮想継承が削除されており、そのままでは必要ありません。ユースケースに応じて、クラスC自体をBaseから継承させることが適切な場合と適切でない場合がありますもしそうなら、すべてを聞かせてABそしてC基地からほぼ継承します。C_AそしてC_B、しかし、彼らの両親から事実上継承する必要はありません(まだ一つだけが存在しますBase基底クラスの仮想継承に起因して継承されたインスタンスを)。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

未知の派生クラスからインターフェース関数を呼び出す(多重継承)

分類Dev

Swift 2.0:パラメータ化されたクラスは、同等のクラスから継承する場合、適切な==関数を呼び出さない

分類Dev

派生ネストクラスで親関数を呼び出す

分類Dev

Pythonの多重継承、基本クラス関数の呼び出し

分類Dev

ES6は継承されたクラスから親関数を呼び出します

分類Dev

画面クラスからkvで親関数を呼び出す

分類Dev

派生クラス関数から親クラス関数を呼び出す方法は?

分類Dev

基本クラスから派生関数を呼び出すC ++

分類Dev

サブクラスからスーパークラス関数を呼び出す適切な方法

分類Dev

子クラスから親関数を呼び出す

分類Dev

C ++の継承、親の代わりに指定されたクラス関数を呼び出しますか?

分類Dev

関数のクラスがNSObjectから継承しない場合は、ObjCから迅速なインスタンス関数を呼び出します

分類Dev

基本クラスから派生クラス関数を呼び出す方法は?

分類Dev

派生クラスのメンバ関数を使用する基本クラスから関数を呼び出す

分類Dev

再帰ループに入ることなく、親クラスの関数を適切に呼び出す

分類Dev

Pythonクラスの多重継承は1つの親から変数を継承するだけですか?

分類Dev

同じ親呼び出しから異なる子クラス関数を呼び出す

分類Dev

継承クラスに存在する静的関数を呼び出す

分類Dev

基本クラスの配列から派生関数を呼び出す

分類Dev

テンプレートクラスで継承されたクラスの関数を呼び出す方法

分類Dev

派生クラス関数を呼び出さない基本クラス関数

分類Dev

typescript親クラスが派生関数を呼び出しています

分類Dev

Flutterの子クラス関数から親クラス関数を呼び出す方法

分類Dev

多重継承で親クラス__init__を呼び出す、正しい方法は何ですか?

分類Dev

多重継承で親クラス__init__を呼び出す、正しい方法は何ですか?

分類Dev

単純なPythonクラス/関数からBoostPython関数を呼び出す

分類Dev

基本クラスから2回継承する場合の「エラー:呼び出しに一致する関数がない」を修正する方法

分類Dev

C ++の継承:派生クラスのインスタンスを使用して基本クラスの仮想関数を呼び出す

分類Dev

派生クラスから基底関数を呼び出すとどうなりますか?

Related 関連記事

  1. 1

    未知の派生クラスからインターフェース関数を呼び出す(多重継承)

  2. 2

    Swift 2.0:パラメータ化されたクラスは、同等のクラスから継承する場合、適切な==関数を呼び出さない

  3. 3

    派生ネストクラスで親関数を呼び出す

  4. 4

    Pythonの多重継承、基本クラス関数の呼び出し

  5. 5

    ES6は継承されたクラスから親関数を呼び出します

  6. 6

    画面クラスからkvで親関数を呼び出す

  7. 7

    派生クラス関数から親クラス関数を呼び出す方法は?

  8. 8

    基本クラスから派生関数を呼び出すC ++

  9. 9

    サブクラスからスーパークラス関数を呼び出す適切な方法

  10. 10

    子クラスから親関数を呼び出す

  11. 11

    C ++の継承、親の代わりに指定されたクラス関数を呼び出しますか?

  12. 12

    関数のクラスがNSObjectから継承しない場合は、ObjCから迅速なインスタンス関数を呼び出します

  13. 13

    基本クラスから派生クラス関数を呼び出す方法は?

  14. 14

    派生クラスのメンバ関数を使用する基本クラスから関数を呼び出す

  15. 15

    再帰ループに入ることなく、親クラスの関数を適切に呼び出す

  16. 16

    Pythonクラスの多重継承は1つの親から変数を継承するだけですか?

  17. 17

    同じ親呼び出しから異なる子クラス関数を呼び出す

  18. 18

    継承クラスに存在する静的関数を呼び出す

  19. 19

    基本クラスの配列から派生関数を呼び出す

  20. 20

    テンプレートクラスで継承されたクラスの関数を呼び出す方法

  21. 21

    派生クラス関数を呼び出さない基本クラス関数

  22. 22

    typescript親クラスが派生関数を呼び出しています

  23. 23

    Flutterの子クラス関数から親クラス関数を呼び出す方法

  24. 24

    多重継承で親クラス__init__を呼び出す、正しい方法は何ですか?

  25. 25

    多重継承で親クラス__init__を呼び出す、正しい方法は何ですか?

  26. 26

    単純なPythonクラス/関数からBoostPython関数を呼び出す

  27. 27

    基本クラスから2回継承する場合の「エラー:呼び出しに一致する関数がない」を修正する方法

  28. 28

    C ++の継承:派生クラスのインスタンスを使用して基本クラスの仮想関数を呼び出す

  29. 29

    派生クラスから基底関数を呼び出すとどうなりますか?

ホットタグ

アーカイブ