看板 EE_DSnP 關於我們 聯絡資訊
請問各位~ 這麼做是否ok呢? class CirGate {...}; class AI_GATE: public CirGate {...} class PI_GATE: public CirGate {...} class PO_GATE: public CirGate {...} vector<CirGate*> _Index; AI_GATE* Gate1 = new AI_GATE; PI_GATE* Gate2 = new PI_GATE; PO_GATE* Gate3 = new PO_GATE; _Index.push_back(Gate1); _Index.push_back(Gate2); _Index.push_back(Gate3); _Index[0]; //讀取Gate1的Memory Address? _Index[1]; //讀取Gate2的Memory Address? _Index[2]; //讀取Gate3的Memory Address? 請問這樣是行得通的嗎?謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.25.108
ric2k1:可以啊! 這就是 polymorphism. 12/15 21:05
不好意思,這次又想到另一個問題。 先前宣告的:   vector<CirGate*> _Index; 比方說儲存了: AI_Gate* Gate1 = new AI_Gate; _Index.push_back(Gate1); 現在想要用 AI_Gate* Gate2 = _Index[n]; //"n"是Gate1的儲存位置。 Gate2 -> Function(); //Function()是繼承CirGate後,唯獨在AI_Gate才有的Function。 這樣Compile會有錯誤耶~要怎麼修呢? 謝謝各位~! ※ 編輯: vepapuru 來自: 140.112.4.191 (12/17 10:07)
e124553423:那個function有在CirGate宣告成virtual嗎 12/17 10:29
vepapuru:可是我在CirGate* 宣告任何Virtual後 12/17 10:47
vepapuru:就無法在 CirGate* Gate1 = new CirGate; 了... 12/17 10:47
e124553423:cirGate裡沒有要用的話就需告成pure virtual吧 12/17 11:40
e124553423:不然就最起碼要一個空的函數定義 12/17 11:41
gamerred:看起來比較像dynamic_cast的問題 把指標轉回原本的型別就 12/18 01:15
gamerred:可以用了吧 12/18 01:15