C語言類與物件的實現

2021-07-05 15:06:43 字數 1364 閱讀 5647

本文**:

為什麼要用c來模擬物件導向的機制,在實際的工作中我們往往在感慨一些物件導向的經典設計模式由於c語言的限制無法使用,其實通過簡單的模擬物件導向的行為,在c語言中也可以使用這些模式。

1:類的構建

類描述了所建立的物件共同的屬性和方法。我們在乙個原始檔中通過把資料和操作進行適當的組織來完成類的模擬。

/*類的資料*/

typedef struct square_s square_t;

struct square_s

;/*類的方法*/

static void draw(void* pobj)

如上所示,乙個正方形的類我們用乙個結構體square_t來表示正方形的屬性,draw是其中的乙個方法。

2:類的封裝性

類的封裝一般要求對細節的隱藏並且提供指定的方法供呼叫者使用,在square這個類中,sidelen是圖形的細節,只需要提供乙個draw介面給呼叫者。因此在提供給外部呼叫的介面標頭檔案中構建如下的介面。

typedef struct shape_s shape;

struct shape_s

;

通過定義不同的資料結構來達到資料隱藏的目的,如下圖所示,對外介面中只能看到draw,內部實現中可以看到draw和sidelen。

3:多型的模擬

多型無疑是物件導向語言的很重要的乙個機制,很多物件導向的設計模式都是以多型為基礎,c語言並不支援多型,導致很多設計模式都無法直接使用。

乙個典型的多型例子,通過宣告乙個shape介面,根據例項化物件型別的不同,pshape在執行時動態的表現不同的行為。

shape* pshape = null;                   //乙個形狀介面

pshape = (shape*)ins(square,2); //例項化為乙個正方形

pshape->draw(pshape); //pshape表現為正方形的行為

/*每個類的建構函式*/

static void* constructor(void* pobj,va_list* pdata)

4:物件的建立

有了類,我們需要例項化為可以執行的物件,例項化主要的工作是分配記憶體、動態繫結、資料初始化等工作。

void* ins(const void* pclass,...)

C 類與物件之日期類的實現

目錄 在實現前,我們要先把類寫好,類中包含成員函式和成員變數。對於日期類來說,拷貝構造和賦值運算子可以不寫,但是我在類中寫了,也沒關係哦。include using std cout using std endl using std cin class date else 拷貝構造 date con...

C 類與物件探秘 結構體實現類

在c 中,class和struct幾乎沒有區別,非要說有區別,就是預設訪問許可權的區別,class預設私有,struct預設公有,這回主要通過c語言的結構體來了解一下c 類和物件的一些原理。結構體中,可以放變數,還有函式宣告,這裡設定不將函式宣告寫在結構體中。演示類1 struct animal v...

C 類與物件

程式設計模型 所有計算機均由兩種元素組成 和資料.精確的說,有些程式是圍繞著 什麼正在發生 而編寫,有些則是圍繞 誰正在受影響 而編寫的.抽象封裝 封裝是一種把 和 所操作的資料 在一起,使這兩者不受外界干擾和誤用的機制.繼承 繼承是指乙個物件從另乙個物件中獲得屬性的過程.是物件導向程式設計的三大原...