作者ckaha (★閃亮數學推理★)
看板C_and_CPP
標題[問題] virtual function的問題
時間Sun Sep 27 15:55:17 2009
假設
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 w
rong unless you can proof it is
true.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.42.113.171
※ 編輯: ckaha 來自: 114.42.113.171 (09/27 15:55)
推 legnaleurc:object factory 09/27 15:59
推 dendrobium:A *a = new B; // 這是你要得嗎? 09/27 16:09
推 Cloud:一定要創造B物件吧~~a[ai] = new B() ....不用b[],c[]... 09/27 16:11
→ legnaleurc:我想他的意思是說想根據input的不同實體化B或C ... 09/27 16:19
→ ckaha:恩恩 如果不實體化B C 這樣B C 的資料是不是無法存在 09/27 16:21
→ spider391:推一樓 第一個直覺的想法跟一樓一樣XD 09/27 21:16