0

重複の可能性:
C++ の学習: ポリモーフィズムとスライス
子クラス オブジェクトで初期化されたポリモーフィック ベース クラス オブジェクトの配列

オブジェクト指向クラスを OpenGL アプリケーションに統合しました。基本クラスにはTick、デルタ時間を表すパラメーターを使用して、ティックごとに (明らかに) 呼び出される関数が呼び出されます。これがどのように見えるかです(この質問に関係のないものは除きます)。

ヘッダー:

class Object
{
public:
    virtual void Tick(float DeltaTime);
}
class Controller : public Object
{
public:
    virtual void Tick(float DeltaTime);
}

次に、メイン ループ、初期化、および破棄を含むクラスを呼び出しEngineます (ウィンドウの作成から分離するため)。
そのクラスでは、ゲーム内のすべてのオブジェクトを追跡する必要があるため、配列を作成しました。
Object* Objects = new Object[10]; // for now max 10 objects

次に、ティック関数を呼び出すために、配列を反復処理しました。

for (unsigned int c = 0; c < 10; c++)
    Objects[c].Tick(delta);

ループdeltaの前に計算されます。

問題は、配列内のオブジェクトの 1 つをController(たとえば) に割り当てると、呼び出される Tick 関数は、Object実際に格納されているクラスではなく、常に含まれていることです。

型キャストも試しました (各クラスには型を識別するための文字列があります) が、役に立ちませんでした。

答えは明らかなもの (前回の質問に対する答えなど) であると確信していますが、答えが見つかりません。

お時間をいただきありがとうございます。:)

4

1 に答える 1

5

スライスの問題が発生しました。

解決策は、ポリモーフィック オブジェクトを値によって配列に格納しないことです。代わりに (スマート) ポインターを使用してください。

于 2012-07-01T23:39:18.970 に答える