[問題] 請問繼承/virtual function的列印順序

作者: liptonbin (我還存在耶)   2015-03-11 22:58:23
請教一下
class Base{
public:
virtual void func{cout<<"Base"<<endl;}
};
class Derived1:public Base{
public:
void func(){cout<<"Derived1"<<endl;}
};
class Derived2:public Derived1{
public:
void func(){cout<<"Derived2"<<endl;}
};
int main(){
Derived2 *ptr_b=new Derived2;
ptr_b->func();
Derived2 *ptr_a=dynamic_case<Derived1 *>(ptr_b);
ptr_a->func();
Base *ptr_bs=dynamic_case<Base *>(ptr_b);
ptr_bs->func();
delete ptr_b;
}
請問為什麼會列印?
ans:
Derived2
Derived2
Derived2
謝謝
作者: Jockey66666 (往事已成追憶)   2015-03-11 23:28:00
因為 Derived2 *ptr_b=new Derived2;
作者: liptonbin (我還存在耶)   2015-03-11 23:46:00
我是想問後面那兩個 第一個印法我知道
作者: littleshan (我要加入劍道社!)   2015-03-12 00:40:00
因為 ptr_a 和 ptr_bs 實際上都指向 Derived2 object如果這不在你的預期之內,表示你對virtual的理解有誤然後,問問題時至少先讓你的程式能compile吧...
作者: carylorrk (carylorrk)   2015-03-12 01:29:00
先不說這個,你聽過多型嗎?
作者: kwpn (ITSST)   2015-03-12 13:06:00
dynamic_case是哪一種case?
作者: liptonbin (我還存在耶)   2015-03-12 21:17:00
我是參考這個http://ppt.cc/6vmX 第四頁
作者: Jockey66666 (往事已成追憶)   2015-03-12 21:45:00
你打錯字那個就不說了, 因為你new Derived2所以才是Derived2阿..

Links booklink

Contact Us: admin [ a t ] ucptt.com