作者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