C++ 如何仅通过调用基类的相同方法来调用继承类的方法?

C++ 如何仅通过调用基类的相同方法来调用继承类的方法?,c++,oop,C++,Oop,就像在游戏引擎中一样,例如在XNA中,更新功能会一次又一次地自动调用。我想知道如何在C++中实现这一点。 例如: class base { void Update(); }; class child1: public base { void Update(); } class child2: public base { void Update(); } void main() { base *obBase = new base(); obBase->Update(); /*This

就像在游戏引擎中一样,例如在XNA中,更新功能会一次又一次地自动调用。我想知道如何在C++中实现这一点。 例如:

class base
{
void Update();
};

class child1: public base
{
void Update();
}

class child2: public base
{
void Update();
}

void main()
{
base *obBase = new base();
obBase->Update(); /*This should call Update of Child1 and Child2 classes how can I do  this*/
}
让它成为虚拟的:

class base
{
    virtual void Update();
};
这将提供多态行为

我想你是:

base *obBase = new child1(); //or new child2();
让它成为虚拟的:

class base
{
    virtual void Update();
};
这将提供多态行为

我想你是:

base *obBase = new child1(); //or new child2();

不能访问基类的派生类的所有实例

您需要做的是使用某种容器,它将存储类型为
Child1
Child2
的所有对象,然后,当您决定时,遍历此容器并调用
Update

比如:

SomeContainer< base* > myObjects;
// fill myObjects like:
// myObjects.insert( new ChildX(...) );
// ...
// iterate through myObjects and call Update
SomeContainermyObjects;
//填充MyObject,如:
//myObjects.insert(新ChildX(…);
// ...
//遍历myObject并调用Update
要做到这一点,您需要使
Update
成为一个虚拟函数


为了防止(潜在的)内存泄漏,请使用智能指针,而不是
base*

您不能访问基类的派生类的所有实例

您需要做的是使用某种容器,它将存储类型为
Child1
Child2
的所有对象,然后,当您决定时,遍历此容器并调用
Update

比如:

SomeContainer< base* > myObjects;
// fill myObjects like:
// myObjects.insert( new ChildX(...) );
// ...
// iterate through myObjects and call Update
SomeContainermyObjects;
//填充MyObject,如:
//myObjects.insert(新ChildX(…);
// ...
//遍历myObject并调用Update
要做到这一点,您需要使
Update
成为一个虚拟函数


为了防止(潜在的)内存泄漏,请使用智能指针,而不是
base*

我想您是在尝试使用多态性,类似这样:

Base* obj1 = new Child1();
Base* obj2 = new Child2();

BaseManager* manager = new BaseManager(); //A class with a data struct that contains instances of Base, something like: list<Base*> m_objects;
manager->add(obj1); //Add obj1 to the list "m_objects"
manager->add(obj2); //Add obj2 to the list "m_objects"

manager->updateAll(); //Executes update of each instance in the list.
Base*obj1=new Child1();
Base*obj2=new Child2();
BaseManager*manager=新的BaseManager()//一个具有包含基本实例的数据结构的类,类似于:列出m_对象;
管理器->添加(obj1)//将obj1添加到“m_对象”列表中
管理器->添加(obj2)//将obj2添加到“m_对象”列表中
manager->updateAll()//执行列表中每个实例的更新。

我猜您是在尝试使用多态性,类似这样:

Base* obj1 = new Child1();
Base* obj2 = new Child2();

BaseManager* manager = new BaseManager(); //A class with a data struct that contains instances of Base, something like: list<Base*> m_objects;
manager->add(obj1); //Add obj1 to the list "m_objects"
manager->add(obj2); //Add obj2 to the list "m_objects"

manager->updateAll(); //Executes update of each instance in the list.
Base*obj1=new Child1();
Base*obj2=new Child2();
BaseManager*manager=新的BaseManager()//一个具有包含基本实例的数据结构的类,类似于:列出m_对象;
管理器->添加(obj1)//将obj1添加到“m_对象”列表中
管理器->添加(obj2)//将obj2添加到“m_对象”列表中
manager->updateAll()//执行列表中每个实例的更新。
所说的“这应该调用Child1和Child2类的更新我该怎么做”,您的意思是,您需要调用类型为
Child1
Child2
的所有对象的
Update
?所说的“这应该调用Child1和Child2类的更新我该怎么做”,您的意思是,您需要调用类型为
Child1
Child2
的所有对象的
Update