C++ 如何仅通过调用基类的相同方法来调用继承类的方法?
就像在游戏引擎中一样,例如在XNA中,更新功能会一次又一次地自动调用。我想知道如何在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
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
SomeContainer myObjects;
//填充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
SomeContainer myObjects;
//填充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
?