看板 EE_DSnP 關於我們 聯絡資訊
: 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; 不好意思,之前眼殘沒有看清楚... 其實比較好的做法是寫成: CirGate* Gate1 = new AI_GATE; ... 雖然原來你那樣寫 push_back 之後也是一樣啦! : : _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) : : 不好意思,這次又想到另一個問題。 : 先前宣告的: :   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。 所以說請用 CirGate* Gate2 = _Index[n]; 這樣才能有 polymorphism. : : 這樣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 請不要 CirGate* Gate1 = new CirGate; 哦!! : → e124553423:cirGate裡沒有要用的話就需告成pure virtual吧 12/17 11:40 應該不會有 CirGate 的 object, 而是 AI_GATE, PI_GATE 等等, 所以可以把 CirGate 裏頭的 virtual function 宣告成 pure virtual (i.e. = 0) : → e124553423:不然就最起碼要一個空的函數定義 12/17 11:41 如果有些 inherited class 的 function 沒有定義, base class 的 virtual function 就不能是 pure virtual, 宣告成空的 { } 也可以,但看你實際的意義。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.160.26.194
nfprzkuma:推! 本來沒有宣告成空的{} 結果看不懂error message... 12/17 21:45