當前位置:編程學習大全網 - 編程語言 - 如何用C語言實現面向對象

如何用C語言實現面向對象

可以通過以下方法實現面向對象:

1、封裝

封裝就是把數據和方法打包到壹個類裏面。其實C語言編程者應該都已經接觸過了,C 標準庫 中的 fopen(), fclose(), fread(), fwrite()等函數的操作對象就是 FILE。

數據內容就是 FILE,數據的讀寫操作就是 fread()、fwrite(),fopen() 類比於構造函數,fclose() 就是析構函數。

2、繼承

繼承就是基於現有的壹個類去定義壹個新類,這樣有助於重用代碼,更好的組織代碼。在 C 語言裏面,去實現單繼承也非常簡單,只要把基類放到繼承類的第壹個數據成員的位置就行了。

例如,我們現在要創建壹個 Rectangle 類,我們只要繼承 Shape 類已經存在的屬性和操作,再添加不同於 Shape 的屬性和操作到 Rectangle 中。

3、多態 C++

語言實現多態就是使用虛函數。在 C 語言裏面,也可以實現多態。 現在,我們又要增加壹個圓形,並且在 Shape 要擴展功能,我們要增加 area() 和 draw() 函數。

但是 Shape 相當於抽象類,不知道怎麽去計算自己的面積,更不知道怎麽去畫出來自己。而且,矩形和圓形的面積計算方式和幾何圖像也是不壹樣的。

4、虛表和虛指針

虛表(Virtual Table)是這個類所有虛函數的函數指針的集合。

虛指針(Virtual Pointer)是壹個指向虛表的指針。這個虛指針必須存在於每個對象實例中,會被所有子類繼承。

5、在構造函數中設置vptr

在每壹個對象實例中,vptr 必須被初始化指向其 vtbl。最好的初始化位置就是在類的構造函數中。

事實上,在構造函數中,C++ 編譯器隱式的創建了壹個初始化的vptr。在 C 語言裏面, 我們必須顯示的初始化vptr。下面就展示壹下,在 Shape 的構造函數裏面,如何去初始化這個 vptr。

  • 上一篇:學前端開發需要掌握哪些編程語言呢?
  • 下一篇:iOS開發,想知道國家氣象局api返回過來的天氣數據將天氣總***描述為幾種類型,
  • copyright 2024編程學習大全網