Re: [問題] virtual function的問題
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章