Re: [問題] virtual function的問題

看板C_and_CPP (C/C++)作者 (石斛蘭)時間16年前 (2009/09/27 16:32), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《ckaha (★閃亮數學推理★)》之銘言: : 假設 : 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 來存放 : 還是說這是必經之路 這當然是必經之路 試想如果沒有實體產生 那member function中的this要指向何方? : 那如果這樣的話 : 如果我今天是要造一個放一堆亂七八糟的東西 : int main(){ : A *a[10]; : B b[10]; : C c[10]; 這種寫法會產生很多沒用到的 B 和 C object : 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; : } : 這樣看起來很蠢(這我自己寫的) : 我為了多形多弄那麼長的一條路 (我自己感覺拉) : 請想問 有沒有什麼更加簡潔的做法呢? : 或者是更好 更清楚的圖像? 你有更好的選擇 就是 A *a[10]; int i=0; while ( cin >> input ) { if ( input ) { a[i++] = new B; } else { a[i++] = new C; } } // 也是亂打的啦~ 用new的方式產生object 而且是有需要才產生 -- 人家可不是為了你才這樣做的哦! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.198.35.85

09/27 16:57, , 1F
謝謝 更了解了一些
09/27 16:57, 1F
文章代碼(AID): #1AloCp98 (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1AloCp98 (C_and_CPP)