[問題] virtual function的問題

看板C_and_CPP (C/C++)作者 (★閃亮數學推理★)時間16年前 (2009/09/27 15:55), 編輯推噓3(303)
留言6則, 5人參與, 最新討論串1/2 (看更多)
假設 class A{ public: virtual bool test() =0; }; class B:public A{ xxxxx; public: bool test(){...}; }; class C:public A{ xxxx; public: bool test(){...}; } int main(){ B b; A *a = &b; a->test(); return 0; } 我想大家都知道這會執行在B裡面的test() 但是 有沒有辦法說不經過創造一個B's object 來存放 還是說這是必經之路 那如果這樣的話 如果我今天是要造一個放一堆亂七八糟的東西 int main(){ A *a[10]; B b[10]; C c[10]; int input,ai=0,bi=0,ci=0; while(cin >> input){ if(input){ b[bi] = B(...); a[ai] = &b[bi]; ++bi; ++ai; }else{ c[ci] = C(...); a[ai] = &c[ci]; ++ci; ++ai; } } for(int i=0; i<ai; ++i){ a[i]->test(); } return 0; } 這樣看起來很蠢(這我自己寫的) 我為了多形多弄那麼長的一條路 (我自己感覺拉) 請想問 有沒有什麼更加簡潔的做法呢? 或者是更好 更清楚的圖像? -- Every thing can be wrong unless you can proof it is true. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.42.113.171 ※ 編輯: ckaha 來自: 114.42.113.171 (09/27 15:55)

09/27 15:59, , 1F
object factory
09/27 15:59, 1F

09/27 16:09, , 2F
A *a = new B; // 這是你要得嗎?
09/27 16:09, 2F

09/27 16:11, , 3F
一定要創造B物件吧~~a[ai] = new B() ....不用b[],c[]...
09/27 16:11, 3F

09/27 16:19, , 4F
我想他的意思是說想根據input的不同實體化B或C ...
09/27 16:19, 4F

09/27 16:21, , 5F
恩恩 如果不實體化B C 這樣B C 的資料是不是無法存在
09/27 16:21, 5F

09/27 21:16, , 6F
推一樓 第一個直覺的想法跟一樓一樣XD
09/27 21:16, 6F
文章代碼(AID): #1AlnfeZI (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1AlnfeZI (C_and_CPP)