国产久操视频-国产久草视频-国产久热精品-国产久热香蕉在线观看-青青青青娱乐-青青青青在线成人视99

  • 正文
    • C++ 多態(tài)
    • C 語(yǔ)言多態(tài)
  • 推薦器件
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

嵌入式 C 語(yǔ)言面向?qū)ο缶幊?--- 多態(tài)

2024/07/10
1431
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論
我是老溫,一名熱愛(ài)學(xué)習(xí)的嵌入式工程師關(guān)注我,一起變得更加優(yōu)秀!

前兩篇文章主要講述了 C 語(yǔ)言面向?qū)ο缶幊台C 封裝和繼承。本篇文章繼續(xù)來(lái)討論一下,如何使用 C 語(yǔ)言實(shí)現(xiàn)面向?qū)ο缶幊痰牧硪粋€(gè)重要特性:多態(tài)。

對(duì)于多態(tài)的概念,網(wǎng)上已經(jīng)有很多描述,簡(jiǎn)而言之,就是同一個(gè)接口的多種狀態(tài)

通俗一點(diǎn)解釋,多態(tài)就像是X-Man(X 戰(zhàn)警)里面的魔形女角色,可以根據(jù)不同的戰(zhàn)斗場(chǎng)景,改變自身的特征狀態(tài),同一個(gè)魔形女,不同的角色狀態(tài)。

在 C++ 語(yǔ)言中,多態(tài)是存在于基類和派生類的關(guān)系里面的,實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)需要使用虛函數(shù)或抽象類。

C++ 多態(tài)

C++語(yǔ)言所描述的多態(tài),分為編譯時(shí)多態(tài)(也可以理解為重載)和運(yùn)行時(shí)多態(tài)。

編譯時(shí)多態(tài)并沒(méi)有使用虛函數(shù),這是因?yàn)槌绦蛟诰幾g階段已經(jīng)確定了其執(zhí)行關(guān)系,所以,一般可以把這種多態(tài)理解為函數(shù)的重載。

而運(yùn)行時(shí)多態(tài),則需要使用虛函數(shù),使用虛函數(shù)是為了在程序編譯的時(shí)候告訴編譯器,這個(gè)函數(shù)需要在執(zhí)行的時(shí)候才能確定其執(zhí)行關(guān)系。

以下通過(guò)兩段代碼,簡(jiǎn)單描述一下 C++ 語(yǔ)言如何使用虛函數(shù)實(shí)現(xiàn)運(yùn)行時(shí)多態(tài)。

頭文件 polymorphism_test.h

源文件 polymorphism_test.cpp

從上面的代碼可以看出,在頭文件polymorphism_test.h 里面,聲明了一個(gè)基類Coordinate和一個(gè)派生類Rectangle,基類和派生類里面都有各自的屬性和虛函數(shù)。

基類的虛函數(shù)和父類的虛函數(shù)一致。在源文件polymorphism_test.cpp里面,分別實(shí)現(xiàn)了基類和派生類的構(gòu)造函數(shù)和虛函數(shù)。

編寫(xiě)一個(gè)測(cè)試函數(shù),用來(lái)測(cè)試以上的代碼,測(cè)試函數(shù)內(nèi)容如下所示:

代碼運(yùn)行結(jié)構(gòu),如下所示:

從以上的測(cè)試代碼可以看出,基類指針指向基類對(duì)象的時(shí)候,就可以調(diào)用基類的函數(shù)方法。當(dāng)基類指針指向派生類對(duì)象時(shí),就可以調(diào)用派生類的函數(shù)方法。

在代碼里面,運(yùn)行時(shí)都是同樣調(diào)用 p_base->display_params() 這段代碼,但卻可以有不同的表現(xiàn)形式,這種現(xiàn)象就是多態(tài)。

在創(chuàng)建基類對(duì)象和父類對(duì)象的時(shí)候,由于虛函數(shù)的存在,編譯器會(huì)為每個(gè)對(duì)象創(chuàng)建一個(gè)虛函數(shù)表,這個(gè)虛函數(shù)表就是基類指針能找到要具體實(shí)現(xiàn)的函數(shù)的關(guān)鍵所在。

由于虛函數(shù)表的存在,因此我們可以通過(guò)基類指針對(duì)所有派生類的虛函數(shù)進(jìn)行訪問(wèn),以上就是C++語(yǔ)言中,封裝、繼承和多態(tài)的簡(jiǎn)單實(shí)現(xiàn)。

在C語(yǔ)言中,也可以使用一些技巧(主要是使用函數(shù)指針)實(shí)現(xiàn)多態(tài)。以下是C語(yǔ)言實(shí)現(xiàn)多態(tài)的具體內(nèi)容。

C 語(yǔ)言多態(tài)

使用 C 語(yǔ)言實(shí)現(xiàn)多態(tài),除了使用結(jié)構(gòu)體構(gòu)建出一個(gè)父類,還需要先構(gòu)建出一個(gè)虛函數(shù)表,這個(gè)虛函數(shù)表就是一系列函數(shù)指針的結(jié)構(gòu)體。

簡(jiǎn)單來(lái)說(shuō),就是在結(jié)構(gòu)體里面包含了函數(shù)指針作為函數(shù)的接口,而這個(gè)函數(shù)指針則可以根據(jù)程序運(yùn)行時(shí)的情況,分別賦予不同的函數(shù)入口,從而實(shí)現(xiàn)同一個(gè)接口不同的功能調(diào)用。

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊(cè) ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
NC7SZ157P6X 1 Fairchild Semiconductor Corporation Multiplexer, LVC/LCX/Z Series, 1-Func, 2 Line Input, 1 Line Output, True Output, CMOS, PDSO6, 1.25 MM, EIAJ, SC-70, SC-88, 6 PIN
$0.39 查看
KSZ8864CNXI-TR 1 Microchip Technology Inc IC SWITCH 4 PORT MII/RMII 64QFN
$5.77 查看
KSZ8041TLI-S 1 Microchip Technology Inc DATACOM, ETHERNET TRANSCEIVER, PQFP48
$3.03 查看

相關(guān)推薦

海丰县| 曲松县| 昌乐县| 舞阳县| 美姑县| 资溪县| 金昌市| 西宁市| 贺兰县| 长武县| 读书| 仙桃市| 叶城县| 灌阳县| 福海县| 塔河县| 乐安县| 屏东市| 九龙县| 买车| 淮安市| 安福县| 阿城市| 义马市| 肇庆市| 吉木萨尔县| 东安县| 满城县| 邳州市| 普兰店市| 南康市| 牟定县| 平南县| 张家口市| 邻水| 乌鲁木齐市| 林芝县| 舞阳县| 乐业县| 铜鼓县| 府谷县|