我正在做一些遊戲設計,並決定我想要一個以數據爲中心的模型......一個從子系統傳遞到子系統的「遊戲數據」對象,並且知道它應該如何繪製,物理應該如何操作如何從用戶輸入會影響它等這個繼承結構是否存在切片問題?
於是我開始了像「BaseRenderer」「BaseInputHandler「監聽器」雜交物」等:
class BaseRenderer
{
public:
virtual void Render(BITMAP *b) = 0;
};
class BaseInputHandler
{
public:
virtual int TakeInputs() = 0;
};
創造了「GAMEDATA」對象,它繼承從這些...
class GameData : public BaseRenderer, public BaseInputHandler, public BaseCalculator
{
public:
/* Virtual Overwrites: (each child of GameData will need to overwrite these!)
void Render(BITMAP *b);
int TakeInputs();
void Calculate();*/
};
然後每個子系統都有一個單將執行各種操作(渲染,走投入等)對遊戲數據...
GameData gd; // Or inherited from GameData...
Input::System().Init();
...
while(loop) {
loop &= !(Input::System().GetInputs(&gd));
...
}
這是做傳承的有效和合理的方式?我問的原因是因爲我得到晦澀的運行時崩潰......沒有分配任何動態內存。昨天晚上,我在GameData中添加了2個成員函數(虛擬或非虛擬),然後當我慢慢添加它們(前1個非虛擬,1個虛擬,2個非虛擬等)時,它就消失了。
我讀了一些關於繼承和切片的內容(不記得現在在哪裏)。我沒有真正理解它,但是我在繼承中導致了間歇性的運行時錯誤?
或者我應該看看使用QueryPerformanceCounter的計時碼嗎?
的MinGW +快板
我想你的意思是*切片*而不是*拼接*。切片解釋[這裏](http://stackoverflow.com/questions/4403726/)。我不認爲這是你的問題。你在這裏展示的看起來不錯。你必須詳細描述你所遇到的崩潰。 – 2011-05-18 09:25:50
@Bingo,我看起來很好。你應該寧願發佈你遇到的崩潰或動態內存問題。 – iammilind 2011-05-18 09:26:21
切片,不拼接。如果通過指針或引用傳遞對象,這可能不是一個風險。如果按值傳遞,派生類可能變成基類,那麼它確實會發生。 – 2011-05-18 09:27:38