我已經閱讀了很多關於虛擬功能的內容,但是我仍然無法獲得某些功能來滿足我的需求。Overriden虛擬功能
基本上,我有下面的類:
class Body
{
protected:
scene::ISceneNode* Model;
virtual void setModel();
public:
Body(core::vector3df Position, core::vector3df Rotation);
};
Body::Body(core::vector3df Position, core::vector3df Rotation)
{
CurrentThrust = 0;
setModel();
Model->setPosition(Position);
Model->setRotation(Rotation);
}
void Body::setModel()
{
Model = Engine::Instance->GetSceneManager()->addCubeSceneNode();
Model->setMaterialFlag(video::EMF_LIGHTING, false);
}
我創建新類繼承車身,這種想法是,我重寫「則setModel()」中的類和構造函數將加載我的新模型,而不是默認的;像下面
class Craft : public Body
{
protected:
virtual void setModel();
public:
Craft(core::vector3df Position, core::vector3df Rotation);
};
Craft::Craft(core::vector3df Position, core::vector3df Rotation) : Body(Position, Rotation)
{
// Other stuff
}
void Craft::setModel()
{
Model = Engine::Instance->GetSceneManager()->addAnimatedMeshSceneNode(Engine::Instance->GetSceneManager()->getMesh("resource/X-17 Viper flying.obj")); // addCubeSceneNode();
Model->setMaterialFlag(video::EMF_LIGHTING, false);
Model->setScale(core::vector3df(0.1f));
}
然而,它始終會創建一個立方體的模型,而不是我的蝰蛇模式,當我創建工藝的新實例。
是否有可能讓虛擬功能像我在想的那樣工作?或者我是否需要更改我的構造函數以在各自的類中創建模型?
感謝
你應該避免在構造函數中調用虛函數http://stackoverflow.com/questions/962132/calling-virtual-functions-inside-constructors – mathematician1975
你如何創建對象?請向我們展示使用情況,這是這種情況下非常重要的部分。 –