我有一個從人形派生的Player類和仿人從雪碧派生像這樣一個問題關於繼承在我的遊戲
Sprite -> Humanoid -> Player
到目前爲止好。 Sprite具有虛擬方法
virtual sf::Sprite getSprite() { return sprite_; }
其中sprite是一個可以繪製到屏幕上的圖像對象。
人形聲明virtual sf::Sprite getSprite();
播放機定義virtual sf::Sprite getSprite() { return sprite_; }
的Sprite具有構件sprite_
;這就是我想做的事:
1)創建一個播放器類,同時傳遞一個精靈,像這樣
Player::Player(sf::Image image)
: Humanoid()
{
sprite_.SetImage(image); // Converts sf::Image to sf::Sprite
}
2)繪製在屏幕上從我的遊戲類,像這樣
sf::Image playerImage;
if(!playerImage.LoadFromFile("Link/Link.png"))
std::cin.get();
Player *player = new Player(playerImage);
/* ... */
App.Draw(player->GetSprite());
測試程序,我發現player->getSprite()
方法確實被調用,但我擔心我可能隱藏了Sprite::getSprite()
方法,而不是實際的派生和使用它。由於Sprite類具有受保護的sprite_成員,因此我在調用函數時實際返回哪個sprite_對象時感到困惑。
此外,它似乎像圖像文件丟失沿線,並在我發佈在SFML論壇之前,我想確認我的繼承樹是否實際上是正確的。
可能是因爲我不太瞭解繼承。如果我希望使用基類的虛函數,是否必須編寫聲明或定義?是否足以宣佈該功能,或者如果我未修改使用它,我可以將其保留嗎? – IAE 2010-11-04 21:07:36
@SoulBeaver,如果你只想使用虛擬函數,你根本不需要聲明它,它就是在基類中定義的,你可以訪問它(假設它不是'private')。如果你改變行爲,你只想聲明和定義它。 – Motti 2010-11-04 21:10:42
或者它是純虛擬的。 :) – suszterpatt 2010-11-04 21:25:54