課程
/后端開發
/C++
/C++遠征之多態篇
Animal 是純虛函數,可是為什么可以用來實例化對象呢?
Animal *animal=new Dog("狗類");
這樣寫竟然可以通過編譯?。。。。?/p>
2015-10-26
源自:C++遠征之多態篇 3-8
正在回答
你所說的Animal是一個類,而這個類中有一個純虛函數對吧,而你實例化的時候,是實例的它的子類Dog這個類,而在Dog這個類中實現了Move這個函數,所以能實例化
qq_陽光下的海風_0 提問者
心悅君夕 回復 qq_陽光下的海風_0 提問者
qq_陽光下的海風_0 提問者 回復 心悅君夕
#include?<iostream> #include?<stdlib.h> #include?<string> using?namespace?std; class?Animal { public: ????Animal()?{} ????Animal(string?name) ????{ ????????m_strName?=?name; ????????cout?<<?"Animal"?<<?endl; ????} ????virtual??~Animal() ????{ ????????cout?<<?"~Animal"?<<?endl; ????} ????virtual?void?eat() ????{ ????????cout?<<?"Animal--"?<<?m_strName?<<?"--?eat"?<<?endl; ????} ????virtual?void?Move()?=0; public: ????string?m_strName; }; class?Dog?:?public?Animal { public: ????Dog()?{} ????Dog(string?name) ????{ ????????m_strName?=?name; ????????cout?<<?"Dog"?<<?endl; ????} ????virtual?~Dog() ????{ ????????cout?<<?"~Dog"?<<?endl; ????} ????virtual?void?eat() ????{ ????????cout?<<?"Dog--"?<<?m_strName?<<?"?--?eat"?<<?endl; ????} ????virtual?void?Move() ????{ ????????cout?<<?"Dog--"?<<?m_strName?<<?"?--?move"?<<?endl; ????} public: ????string?m_strName; }; int?main(void) { ????Animal?*animal=new?Dog("狗類"); ????animal->eat(); ????animal->Move(); ????delete?animal; ????animal=NULL; ????return?0; }
Animal *animal=new Dog("狗類");就是這句代碼
你代碼呢?
舉報
本教程將帶領大家體會面向對象三大特性中的多態特性
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2015-10-29
你所說的Animal是一個類,而這個類中有一個純虛函數對吧,而你實例化的時候,是實例的它的子類Dog這個類,而在Dog這個類中實現了Move這個函數,所以能實例化
2015-10-28
Animal *animal=new Dog("狗類");就是這句代碼
2015-10-27
你代碼呢?