物聯(lián)網(wǎng)/嵌入式工程師
重磅升級(jí):新增硬件電路設(shè)計(jì)與實(shí)戰(zhàn),讓你軟硬通吃,同級(jí)PK無敵!行業(yè)風(fēng)口、政策傾斜,新晉熱門高薪不內(nèi)卷!0基礎(chǔ)一站式就業(yè)完整路徑,搶占先發(fā)優(yōu)勢!
上一小節(jié),我們介紹了父類和子類的轉(zhuǎn)換,也簡單介紹了多態(tài),從這節(jié)開始,我們?cè)敿?xì)介紹多態(tài)。
class Base { public: void func(){ printf("this is Base\n"); } } class Child : public Base { public: void func(){ printf("this is Child\n"); } }
int main(int argc,char **argv) { Child * obj = new Child(); Base * baseobj = (Base *)obj; baseobj->func(); delete obj; return 0; }
我們之前講述了什么是多態(tài),還用了一個(gè)例子,將一個(gè)指針的類型做成強(qiáng)轉(zhuǎn),然后調(diào)用 func 函數(shù),就會(huì)發(fā)現(xiàn), func 函數(shù)會(huì)隨著被強(qiáng)轉(zhuǎn)的類型的變換而變換,這種函數(shù)的關(guān)聯(lián)過程稱為編聯(lián)。按照聯(lián)編所進(jìn)行的階段不同,可分為兩種不同的聯(lián)編方法:靜態(tài)聯(lián)編和動(dòng)態(tài)聯(lián)編。
Child * obj = new Child();
Base * baseobj = (Base *)obj;
baseobj->func();
delete obj;
return 0;
再來看看這個(gè)例子,我們通過強(qiáng)制轉(zhuǎn)換來指定 func 執(zhí)行的是哪個(gè)。這個(gè)過程是在編譯階段就將函數(shù)實(shí)現(xiàn)和函數(shù)調(diào)用關(guān)聯(lián)起來,因此靜態(tài)聯(lián)編也叫早綁定,在編譯階段就必須了解所有的函數(shù)或模塊執(zhí)行所需要檢測的信息。
除了靜態(tài)編聯(lián)之外,C++ 還支持動(dòng)態(tài)編聯(lián)。動(dòng)態(tài)聯(lián)編是指聯(lián)編在程序運(yùn)行時(shí)動(dòng)態(tài)地進(jìn)行,根據(jù)當(dāng)時(shí)的情況來確定調(diào)用哪個(gè)同名函數(shù),實(shí)際上是在運(yùn)行時(shí)虛函數(shù)的實(shí)現(xiàn)。當(dāng)然,我們現(xiàn)在所學(xué)的知識(shí)還沒辦法完成動(dòng)態(tài)編聯(lián),接下來,我們將要學(xué)習(xí)虛函數(shù),來實(shí)現(xiàn)動(dòng)態(tài)編聯(lián)。
請(qǐng)驗(yàn)證,完成請(qǐng)求
由于請(qǐng)求次數(shù)過多,請(qǐng)先驗(yàn)證,完成再次請(qǐng)求
打開微信掃碼自動(dòng)綁定
綁定后可得到
使用 Ctrl+D 可將課程添加到書簽
舉報(bào)