我有一个正在处理的问题。我有一个以这种模式相互继承的数字类:
#include <stdio.h>
#include <stdlib.h>
#include <list>
class TimeObject
{
public:
virtual void Tick()=0;
std::list<TimeObject*> ticks;
};
class MapObject : public TimeObject
{
public:
MapObject()
{
ticks.push_front(this);
printf("Create MapObject %p\n", this);
}
void Tick() { printf("mapobject tick\n"); }
};
class ControlObject : public MapObject
{
public:
ControlObject()
{
ticks.push_front(this);
printf("Create ControlObject %p\n", this);
}
void Tick() { printf("controlobject tick\n"); }
};
int main()
{
ControlObject test;
std::list<TimeObject*>::iterator it = test.ticks.begin();
for(; it != test.ticks.end(); it++)
{
TimeObject *trigger = *it;
trigger->Tick();
}
return 0;
}
示例中的列表存储任何TimeObject
派生类。我的问题是,当MapObject
在列表中存储指针时,也ControlObjects
调度总是选择ControlObject
函数。
是否可以使用多态性通过指针触发MapObject
函数?ControlObject
如果不可能/不切实际,有什么好的选择?