我遇到以下代碼的問題,重寫虛擬函數未執行。不知道我在這裏做錯了可能是一個愚蠢的錯誤。反正這是一個遊戲項目,我有對象的數組,看起來像這樣(核心::陣列是Irrlicht的陣列,類似於矢量陣列)如何在C++中正確使用虛擬成員函數
core::array<GameObject> gameTargets;
這是GameObject
和Zombie
定義
class GameObject {
protected:
scene::ISceneNode* node;
public:
int ID;
int hitpoints;
GameObject() {
...
};
void setNode(scene::ISceneNode* inode) {
...
}
virtual void shot(int dmg) {
... [BREAKPOINT HERE]
}
scene::ISceneNode* getNode() {
return node;
}
};
class Zombie : public GameObject {
public:
static const enum Animation {
ZOMBIE_WALK,
ZOMBIE_HURT,
ZOMBIE_DIE,
ZOMBIE_TWITCH,
ZOMBIE_ATTACK,
ZOMBIE_IDLE
};
//We only want to accepted animated mesh nodes for this object
Zombie(int hp, scene::IAnimatedMeshSceneNode* inode) {
...
}
//Override the shot function
void shot(int dmg) {
... [BREAKPOINT HERE]
}
//Animate the zombie
void setAnimation(Animation anim) {
...
}
};
派生類的成員函數永遠不會被調用,我創建的對象這樣
Zombie target(hp, (scene::IAnimatedMeshSceneNode*)node);
,並呼籲像這樣
for(int i = 0; (u32)i<level->gameTargets.size(); i++) {
if(selectedNode == level->gameTargets[i].getNode()) {
level->gameTargets[i].shot(b->damage);
}
}
其中b是一個指向子彈用int變量破壞和gameTargets虛函數包含遊戲對象
行數組如果聲明無效殭屍::拍攝(會發生什麼詮釋)爲虛擬?你使用什麼編譯器? – Joel 2012-04-19 14:15:18
我正在使用visual express C++,我嘗試在派生類中使用虛函數,但它沒有工作,我懷疑它正在切片在 – 2012-04-19 14:18:04
下面給出的答案@DannyBirch:在派生類中使用'virtual'關鍵字沒有什麼區別,如果你願意,你也可以忽略它。重要的是它在基類中是「虛擬」的。 – 2012-04-19 14:24:00