親クラス関数で継承されたオブジェクトを使用するにはどうすればよいですか?

Robotex

:私は2つのクラス持っMovableObjectGravitySourceをから継承されたことをMovableObject(GravitySourcesがあまりにも移動することができますので)。MovableObject I機能は持っている統合GravitySourcesのリストを使用して、その計算の移動のparamsを。したがって、GravitySourcesのリストをこの関数に入れることはできません。またGravitySourceMovableObject関数(integrateを含む)の複製を作成したくありませんでは、この問題をどのように解決するのでしょうか?C ++です。

vsoftco

あなたのMovableObject::integrate関数宣言を取ることができMovableObject*、パラメータとしてのようなものを指すポインタを:

return_type MovableObject::integrate(Movable* ); 

この方法では、あなたが渡すことができますGravitySourcesMovable::integrate、そして行動が多型となり、あなたがアクセスしていすなわちvirtualベースへのポインタを介した機能をMovableObject*したがってvirtual、ベースへのポインタを介して呼び出すことができるいくつかの一般的な関数があることを確認し、それらに作業を委任します。

の配列を渡したい場合GravitySourcesは、MovableObject*ポインタを使用してGravitySources配列内安全に移動できないため、少し注意が必要ですあなたができることは、クラスを前方宣言するGravitySourcesことです、そしてあなたは宣言することができます

return_type MovableObject::integrate(GravitySources* ); 

ポインタを介して不完全な型を使用できるため、上記の宣言は問題ありません。関数の実装がの完全な定義の後に来ることを確認してくださいGravitySourcesこれで、の配列をGravitySources関数に渡すことができます。

以下のおもちゃの例:

#include <iostream>

class GravitySources; // need this forward declaration

class MovableObject
{
public:
    void integrate(GravitySources* gs, std::size_t N); // process N GravitySources
    virtual void f(); // our common virtual interface
    virtual ~MovableObject() = default;
};

class GravitySources: public MovableObject
{
    int _label; // label the instance
public:
    GravitySources(int label): _label(label) {}
    void f() override;
};

void MovableObject::integrate(GravitySources* gs, std::size_t N)
{
    // process the GravitySources
    for (std::size_t i = 0; i < N; ++i)
    {
        gs[i].f();
    }
}
void MovableObject::f()
{
    std::cout << "MovableObject::f()" << std::endl;
}

void GravitySources::f()
{
    std::cout << "GravitySources::f() " << _label << std::endl;
}

int main()
{
    MovableObject mo;
    GravitySources gs[3] {1, 2, 3}; // 3 GravitySources
    mo.integrate(gs, 3); // process them
}

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

QT Creatorで継承されたクラスのオブジェクトとしてQWidgetを宣言するにはどうすればよいですか?

分類Dev

reactjs関数オブジェクトで継承を行うにはどうすればよいですか?

分類Dev

継承されたクラスオブジェクトの配列を作成するにはどうすればよいですか?

分類Dev

継承されたクラスで親クラス変数の値を設定し、それを継承された関数で使用するにはどうすればよいですか?

分類Dev

Pythonを使用して継承されたオブジェクトを作成するにはどうすればよいですか?

分類Dev

親クラスを継承された子クラスに休止状態でダウンキャストするにはどうすればよいですか?

分類Dev

Perlオブジェクト(クラスではない)の構造と継承履歴を取得するにはどうすればよいですか?

分類Dev

継承されたクラスの拡張機能の関数をオーバーライドするにはどうすればよいですか?

分類Dev

継承されたウィジェットを使用するときにブロックを破棄するにはどうすればよいですか?

分類Dev

多重継承のオブジェクトで使用する変数を指定するにはどうすればよいですか?

分類Dev

C ++で継承されたオブジェクトに.txtファイルを読み取るにはどうすればよいですか?

分類Dev

reactJSのネストされた状態オブジェクトでreduce関数を使用するにはどうすればよいですか?

分類Dev

パラメータ化された関数内でオブジェクトプロパティを使用するにはどうすればよいですか?

分類Dev

Hibernateを使用して子オブジェクトを親クラスオブジェクトに保存するにはどうすればよいですか?

分類Dev

JavaScriptで既存のオブジェクトを継承する新しいオブジェクトを作成するにはどうすればよいですか?

分類Dev

すべての変数を親クラスからinit関数を持つ基本クラスに継承するにはどうすればよいですか?

分類Dev

スーパークラスの継承されたプロパティをサブクラスのオブジェクトに表示するにはどうすればよいですか?

分類Dev

親オブジェクトで関数を呼び出すにはどうすればよいですか?(C ++)

分類Dev

タイプスクリプトのオブジェクトでクラス関数を使用するにはどうすればよいですか?

分類Dev

この例では、同じインターフェイスから継承するさまざまなオブジェクトをジェネリック型で1つの変数に格納するにはどうすればよいですか?

分類Dev

Java:継承されたクラスからオブジェクトを取得するgetterメソッドを作成するにはどうすればよいですか?

分類Dev

Java:継承されたクラスからオブジェクトを取得するgetterメソッドを作成するにはどうすればよいですか?

分類Dev

継承されたオブジェクトの流れるようなメソッドを呼び出すときに、順序を無関係にするにはどうすればよいですか?

分類Dev

プロジェクトでES6クラスの継承関係を確認するにはどうすればよいですか?

分類Dev

クラスを開いてActiveRecordオブジェクトに変換するにはどうすればよいですか?(たとえば、ActiveRecord :: Baseを継承するようにします)

分類Dev

親クラスに C++ のデフォルト コンストラクターがない場合、継承されたクラスでコンストラクターを使用するにはどうすればよいですか?

分類Dev

def __init __(self)関数を実行した後、クラスオブジェクトにデータを追加するにはどうすればよいですか?

分類Dev

相互に継承しないオブジェクトをキャストするにはどうすればよいですか?

分類Dev

特定の属性のみを継承するオブジェクトのエイリアスを作成するにはどうすればよいですか

Related 関連記事

  1. 1

    QT Creatorで継承されたクラスのオブジェクトとしてQWidgetを宣言するにはどうすればよいですか?

  2. 2

    reactjs関数オブジェクトで継承を行うにはどうすればよいですか?

  3. 3

    継承されたクラスオブジェクトの配列を作成するにはどうすればよいですか?

  4. 4

    継承されたクラスで親クラス変数の値を設定し、それを継承された関数で使用するにはどうすればよいですか?

  5. 5

    Pythonを使用して継承されたオブジェクトを作成するにはどうすればよいですか?

  6. 6

    親クラスを継承された子クラスに休止状態でダウンキャストするにはどうすればよいですか?

  7. 7

    Perlオブジェクト(クラスではない)の構造と継承履歴を取得するにはどうすればよいですか?

  8. 8

    継承されたクラスの拡張機能の関数をオーバーライドするにはどうすればよいですか?

  9. 9

    継承されたウィジェットを使用するときにブロックを破棄するにはどうすればよいですか?

  10. 10

    多重継承のオブジェクトで使用する変数を指定するにはどうすればよいですか?

  11. 11

    C ++で継承されたオブジェクトに.txtファイルを読み取るにはどうすればよいですか?

  12. 12

    reactJSのネストされた状態オブジェクトでreduce関数を使用するにはどうすればよいですか?

  13. 13

    パラメータ化された関数内でオブジェクトプロパティを使用するにはどうすればよいですか?

  14. 14

    Hibernateを使用して子オブジェクトを親クラスオブジェクトに保存するにはどうすればよいですか?

  15. 15

    JavaScriptで既存のオブジェクトを継承する新しいオブジェクトを作成するにはどうすればよいですか?

  16. 16

    すべての変数を親クラスからinit関数を持つ基本クラスに継承するにはどうすればよいですか?

  17. 17

    スーパークラスの継承されたプロパティをサブクラスのオブジェクトに表示するにはどうすればよいですか?

  18. 18

    親オブジェクトで関数を呼び出すにはどうすればよいですか?(C ++)

  19. 19

    タイプスクリプトのオブジェクトでクラス関数を使用するにはどうすればよいですか?

  20. 20

    この例では、同じインターフェイスから継承するさまざまなオブジェクトをジェネリック型で1つの変数に格納するにはどうすればよいですか?

  21. 21

    Java:継承されたクラスからオブジェクトを取得するgetterメソッドを作成するにはどうすればよいですか?

  22. 22

    Java:継承されたクラスからオブジェクトを取得するgetterメソッドを作成するにはどうすればよいですか?

  23. 23

    継承されたオブジェクトの流れるようなメソッドを呼び出すときに、順序を無関係にするにはどうすればよいですか?

  24. 24

    プロジェクトでES6クラスの継承関係を確認するにはどうすればよいですか?

  25. 25

    クラスを開いてActiveRecordオブジェクトに変換するにはどうすればよいですか?(たとえば、ActiveRecord :: Baseを継承するようにします)

  26. 26

    親クラスに C++ のデフォルト コンストラクターがない場合、継承されたクラスでコンストラクターを使用するにはどうすればよいですか?

  27. 27

    def __init __(self)関数を実行した後、クラスオブジェクトにデータを追加するにはどうすればよいですか?

  28. 28

    相互に継承しないオブジェクトをキャストするにはどうすればよいですか?

  29. 29

    特定の属性のみを継承するオブジェクトのエイリアスを作成するにはどうすればよいですか

ホットタグ

アーカイブ