加入星計劃,您可以享受以下權益:

  • 創(chuàng)作內容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • C++ 多態(tài)
    • C 語言多態(tài)
  • 推薦器件
  • 相關推薦
  • 電子產業(yè)圖譜
申請入駐 產業(yè)圖譜

嵌入式 C 語言面向對象編程 --- 多態(tài)

07/10 10:05
1011
閱讀需 4 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論
我是老溫,一名熱愛學習的嵌入式工程師,關注我,一起變得更加優(yōu)秀!

前兩篇文章主要講述了 C 語言面向對象編程– 封裝和繼承。本篇文章繼續(xù)來討論一下,如何使用 C 語言實現(xiàn)面向對象編程的另一個重要特性:多態(tài)。

對于多態(tài)的概念,網上已經有很多描述,簡而言之,就是同一個接口的多種狀態(tài)

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

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

C++ 多態(tài)

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

編譯時多態(tài)并沒有使用虛函數,這是因為程序在編譯階段已經確定了其執(zhí)行關系,所以,一般可以把這種多態(tài)理解為函數的重載。

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

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

頭文件 polymorphism_test.h

源文件 polymorphism_test.cpp

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

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

編寫一個測試函數,用來測試以上的代碼,測試函數內容如下所示:

代碼運行結構,如下所示:

從以上的測試代碼可以看出,基類指針指向基類對象的時候,就可以調用基類的函數方法。當基類指針指向派生類對象時,就可以調用派生類的函數方法。

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

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

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

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

C 語言多態(tài)

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

簡單來說,就是在結構體里面包含了函數指針作為函數的接口,而這個函數指針則可以根據程序運行時的情況,分別賦予不同的函數入口,從而實現(xiàn)同一個接口不同的功能調用。

推薦器件

更多器件
器件型號 數量 器件廠商 器件描述 數據手冊 ECAD模型 風險等級 參考價格 更多信息
FODM121AR2V 1 onsemi 4-Pin Full Pitch Mini-Flat Package Phototransistor Optocouplers, 2500-REEL
$0.21 查看
CSTCE16M0V13C99-R0 1 Murata Manufacturing Co Ltd Ceramic Resonator, 16MHz Nom, SMD, 3 PIN

ECAD模型

下載ECAD模型
$1.6 查看
CSTCC8M38G53-R0 1 Murata Manufacturing Co Ltd Ceramic Resonator,
暫無數據 查看

相關推薦

電子產業(yè)圖譜