【发布时间】:2017-03-11 15:35:06
【问题描述】:
所以。
我正在为学校做一个小型游戏项目,我的对象有碰撞和东西,我的想法是检查一个对象是否与另一个对象发生碰撞,然后让每种类型的特定逻辑都有一堆重载功能取决于发送的对象。例如,如果对象是玩家控制的对象,敌人会伤害它,但如果是与敌人碰撞的通电,一切都会好起来的。
所以,我希望我可以做类似的事情(显然一切都继承自 Obj):
std::vector<Obj*> list;
list.push_back(new Powerup());
list.push_back(new Enemy());
list.push_back(new Player());
for (auto i: list) {
for (auto j: list) {
if (collision(i,j)) {
i->doStuff(*j);
}
}
}
但是我很难找到发送正确类型的方法。我做了一个测试程序来演示这个问题:
#include <iostream>
class A {
public:
virtual void doStuff(A& T) { std::cout << "A->A!" << std::endl; }
};
class B : public A {
public:
virtual void doStuff(A& T) { std::cout << "B->A!" << std::endl; }
};
class C : public A {
public:
virtual void doStuff(A& T) { std::cout << "C->A!" << std::endl; }
virtual void doStuff(B& T) { std::cout << "C->B!" << std::endl; }
};
int main() {
A* base;
A a;
B b;
C c;
c.doStuff(a);
c.doStuff(b);
base = &a;
c.doStuff(*base);
base = &b;
c.doStuff(*base);
return 0;
}
运行它我得到了这个:
C->A!
C->B!
C->A!
C->A!
当我期待时:
C->A!
C->B!
C->A!
C->B!
知道如何进行这项工作吗?
【问题讨论】:
标签: c++ polymorphism