作者vuluy (伏盧)
看板EE_DSnP
標題Re: [問題] 用Vector存地址
時間Sat Dec 17 14:58:12 2011
※ 引述《ric2k1 (Ric)》之銘言:
: 不好意思,之前眼殘沒有看清楚...
: 其實比較好的做法是寫成:
: CirGate* Gate1 = new AI_GATE;
: ...
: 雖然原來你那樣寫 push_back 之後也是一樣啦!
: 所以說請用 CirGate* Gate2 = _Index[n];
: 這樣才能有 polymorphism.
我想請問一下
1.
AI_GATE* Gate2 = _Index[n];產生的error
是不是因為把CirGate* assign到AI_GATE*呢
如果是的話,是不是
可以把AI_GATE* assign給CirGate*
卻不能把CirGate* assign給AI_GATE* (就算骨子裡是AI_GATE*)
另外
2.
AI_GATE* Gate = new AI_GATE;
CirGate* Gate1 = new AI_GATE;
兩者的用法一樣嗎
還是這樣Gate就無法執行在base class中卻未在AI_GATE中被定義的function呢
: 請不要 CirGate* Gate1 = new CirGate; 哦!!
3.
請問為什麼不能new CirGate
如果裡面沒有pure virtual function也不行嗎
: 應該不會有 CirGate 的 object, 而是 AI_GATE, PI_GATE 等等,
: 所以可以把 CirGate 裏頭的 virtual function 宣告成 pure virtual (i.e. = 0)
: 如果有些 inherited class 的 function 沒有定義,
: base class 的 virtual function 就不能是 pure virtual,
: 宣告成空的 { } 也可以,但看你實際的意義。
發現自己對inheritance還是非常不了解
以上3個問題忘記老師有沒有講過了
不知道猜想的對不對
感謝回答
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.249.129
1F:→ e124553423:母class的指標可以接繼承那個的class的物件 12/17 19:44
2F:→ e124553423:反過來則不行 12/17 19:44
3F:→ e124553423:如果要用繼承產生的class的member function 12/17 19:45
4F:→ e124553423:就要在母class裡面先宣告成virtual 12/17 19:45
5F:→ e124553423:cirGate裡面如果有pure virtual function 12/17 19:46
6F:→ e124553423:就不能生成物件,因為那個class還沒定義完全 12/17 19:47
7F:→ e124553423:當然如果用CirGate*接new CirGate 12/17 19:47
8F:→ e124553423:只要CirGate裡面沒有pure virtual funtion 12/17 19:48
9F:→ e124553423:而且其他東西都有定義好 compile就不會有問題 12/17 19:48