1

クラスObjectといくつかの派生クラスがありclass Bird : public Objectます。関数Object::RenderBird::Renderが定義され、実装されています。(実際のところ、Bird::Render呼び出しますObject::Render

vector<Object*>たくさんのBird*sを保持している a もあります。現在、将来的には、このベクターは他のタイプのオブジェクトも保持します。

私の質問は: そのベクトルの要素の型を知らなくても、その特定のRender機能を実行することは可能ですか?

vector<Object*> objects;
object.push_back(new Bird());
// ...
objects[i]->Render(); // This should execute Bird::Render

私が見る限り、最後の行のみが実行Object::Renderされます (呼び出し関数に関しては、これはバニラObjectです)。

それを変更する方法はありますか?

4

1 に答える 1

3

Object::Render関数をオーバーライドする必要がvirtual functionあります。BirdRender

class Object
{
public:
   virtual ~Object() {}
   virtual void Render() = 0;
};

void Object::Render() {}

class Bird : public Object
{
public:
   void Render() { Object::Render(); }
};

vector<Object*> objects;
objects.push_back(new Bird());
objects[0]->Render();
于 2013-10-31T07:42:12.637 に答える