[问题] 请问继承/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