作者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)
1F:推 legnaleurc:object factory 09/27 15:59
2F:推 dendrobium:A *a = new B; // 这是你要得吗? 09/27 16:09
3F:推 Cloud:一定要创造B物件吧~~a[ai] = new B() ....不用b[],c[]... 09/27 16:11
4F:→ legnaleurc:我想他的意思是说想根据input的不同实体化B或C ... 09/27 16:19
5F:→ ckaha:恩恩 如果不实体化B C 这样B C 的资料是不是无法存在 09/27 16:21
6F:→ spider391:推一楼 第一个直觉的想法跟一楼一样XD 09/27 21:16