C++第六篇多態(tài)

C++中的多態(tài)性分為編譯時多態(tài)性運行時多態(tài)性,編譯時多態(tài)通過函數重載和模板體現,運行多態(tài)通過虛函數體現
編譯、連接,成為可執(zhí)行文件的過程,是把可執(zhí)行代碼聯編在一起的過程。在運行之前就完成的聯編成為靜態(tài)聯編;運行時才完成的聯編稱為動態(tài)聯編


靜態(tài)聯編較為簡單,不予贅述。

動態(tài)聯編

為了達到動態(tài)聯編獲得運行時多態(tài)效果,通常都是用指向基類的指針來調用派生類的虛函數
定義為指向基類的指針,可以作為派生類的指針指向派生類對象,可以訪問從基類繼承下來的各個派生類對象
class Base{ public: void who(){ cout<<"Base"<<endl;}}; class Derived1 : public Base{ public: void who(){ cout<<"Derived1"<<endl;}}; class Derived2 : public Base{ public: void who(){ cout<<"Derived2"<<endl;}}; int main(){ Base base_obj, *p; Derived1 one_obj; Derived2 two_obj; p = &base_obj; p->who(); //輸出Base,改過之后Base p = &one_obj; p->who(); //輸出Base,改過之后Derived1 p = &two_obj; p->who(); //輸出Base,改過之后Derived2 return 0; }
將基類改為virtual void who(){ cout<<"Base"<<endl;}
一個類的實例也被認為是其基類的實例

純虛函數和抽象類

純虛函數:是在基類中聲明的虛函數,但沒有具體的函數定義體,具體定義在各個派生類中。一般格式:
virtual 函數原型 = 0;
包含虛函數的類稱為抽象類,例如:
class CClosedFigure{ public: virtual void Draw() = 0; virtual double Perimeter() = 0; virtual double Area() = 0; };
抽象類沒有完整的實現,無法實例化,但是可以創(chuàng)建指向抽象類的指針
CClosedFigure *p; //是正確的

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容