作者ric2k1 (Ric)
看板EE_DSnP
標題Re: [問題] 用Vector存地址
時間Sat Dec 17 13:38:28 2011
: 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
1F:推 nfprzkuma:推! 本來沒有宣告成空的{} 結果看不懂error message... 12/17 21:45