多态相关概念
多態(tài)相關(guān)注意事項
所謂的多態(tài)就是指函數(shù)有多中狀態(tài), 在C++中通常是通過父類指針指向子類對象的方法實現(xiàn)多態(tài), 這樣父類可以通過子類的類型調(diào)用不同的方法. 即實現(xiàn)一個接口多種方法, 多態(tài)的引用是為了實現(xiàn)接口復(fù)用
在 C++中多態(tài)是通過虛函數(shù)來實現(xiàn)的. 子類通過對父類相關(guān)接口進行重寫實現(xiàn)一個接口多種狀態(tài). 虛函數(shù)允許子類對父類相關(guān)接口進行重寫,
多態(tài)性的條件:
派生類的虛函數(shù)必須和基類的虛函數(shù)函數(shù)名相同, 參數(shù)相同, 返回值相同
只有類的成員函數(shù)才能實現(xiàn)虛函數(shù). 靜態(tài)成員函數(shù), 內(nèi)聯(lián)函數(shù)都不能成為虛函數(shù)
構(gòu)造函數(shù)不能為虛函數(shù)
析構(gòu)函數(shù)才能定義為虛函數(shù)
指針或者引用才能實現(xiàn)多態(tài)
動態(tài)聯(lián)編和靜態(tài)聯(lián)編
所謂的靜態(tài)聯(lián)編就是編譯器在編譯的時候就已經(jīng) 確定了要執(zhí)行那個函數(shù), 而所謂的動態(tài)聯(lián)編就是程序在運行的時候才根據(jù)對象的類型確定執(zhí)行那個函數(shù)接口
#include"iostream.h"class A{public:voidf(){cout<<"A"<<"";}};classB:publicA{public:voidf(){cout<<"B"<<endl;}};Void main(){A*pa=NULL;Aa;Bb;pa=&a;pa->f();pa=&b;pa->f();}此時沒有構(gòu)成重載, 因此在編譯的時候通過指針的類型來判斷函數(shù)調(diào)用那個接口, 此時的對象是a, 屬于A類型的一個指針, 因此執(zhí)行結(jié)果便是兩個A. 要想實現(xiàn)當指針指向不同對象時執(zhí)行不同的操作,就必須將基類中相應(yīng)的成員函數(shù)定義為虛函數(shù),進行動態(tài)聯(lián)編
動態(tài)聯(lián)編
程序在運行的時候通過對象的類型來根據(jù)當時的情況動態(tài)的決定要執(zhí)行那個接口函數(shù). 在C++動態(tài)聯(lián)編只能通過父類指針或者父類引用調(diào)用虛函數(shù)才能實現(xiàn)動態(tài)聯(lián)編
#include"iostream.h"classA{public:Virtual voidf()//虛函數(shù){cout<<"A"<<"";}};classB:publicA{public:Virtual voidf()//虛函數(shù){cout<<"B"<<endl;}};voidmain(){ A*pa=NULL;Aa;Bb;pa=&a;pa->f();//Apa=&b;pa->f();//B}總結(jié)
- 上一篇: 明日方舟怎么更换首页场景
- 下一篇: 香蜜沉沉烬如霜剧情介绍