作者vepapuru (ChanYu)
看板EE_DSnP
标题[问题] 用Vector存地址
时间Thu Dec 15 17:42:13 2011
请问各位~
这麽做是否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
1F:推 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)
2F:→ e124553423:那个function有在CirGate宣告成virtual吗 12/17 10:29
3F:→ vepapuru:可是我在CirGate* 宣告任何Virtual後 12/17 10:47
4F:→ vepapuru:就无法在 CirGate* Gate1 = new CirGate; 了... 12/17 10:47
5F:→ e124553423:cirGate里没有要用的话就需告成pure virtual吧 12/17 11:40
6F:→ e124553423:不然就最起码要一个空的函数定义 12/17 11:41
7F:推 gamerred:看起来比较像dynamic_cast的问题 把指标转回原本的型别就 12/18 01:15
8F:→ gamerred:可以用了吧 12/18 01:15