C語言實現C 中物件導向特性

2021-08-08 08:07:48 字數 1599 閱讀 6945

c語言是面向過程的語言,因此用c語言進行物件導向程式設計,則需要做一些預處理。

一、使用結構體定義實現物件

物件導向的開發的核心思想就是物件,可以把任何事物抽象成物件,而把程式之間的互動以及呼叫,物件之間傳遞訊息(實際上就是物件成員函式的呼叫)的形式來實現。

物件導向的語言專門引入了物件型別定義機制,用class關鍵字實現,c語言中沒有專門針對物件導向的思想,也沒有引入物件型別定義機制,但c語言中的結構體定義十分適合

定義物件型別。以下是物件導向class定義型別和面向過程語言sturct定義物件型別:

class定義乙個物件型別

class  _type_object

struct定義乙個物件型別

struct  _type_object

;

與c++不同的是,c語言定義的成員函式增加了乙個額外的引數:lpthis,這是最關鍵的一點。實際上,c++語言在呼叫成員函式的時候,也隱含了乙個指向自身的引數(this)

因為c語言不支援這種隱含機制,因此需要明確的指定指向自身的引數。兩種方式呼叫成員函式的方式如下:

_type_object  typeobject;

typeobject.getobjecttype(); //c++呼叫方式

typeobject.getobjecttype(&typeobject); //c呼叫方式

二、使用巨集定義實現繼承特性

物件導向的另外乙個重要思想就是實現繼承,而c語言不具備這一特性。為了實現這個特性,在定義個物件(結構體)的時候,同時也定義乙個巨集,用來實現繼承

struct  __type_object

;#define inherit_from_type_object dowhile(0);

假設另外乙個物件從該物件繼承,則可以這樣定義

struct  _child_object

;

這樣就實現了物件__child_object從物件__type_object繼承的目的。顯然,這樣做的乙個弊端是物件尺寸會增大(每個物件的定義都包含了指向成員函式的指標)

,但相對給開發造成的便利以及增強**的可移植性而言,是非常值得的。

三、使用強制轉換實現多型特性

物件導向語言的另乙個重要特性就是多型,子類型別的物件可以適應父類型別的所有情況。為了實現這個特性,可以使用c語言的強制型別轉換機制。

比如__child_object從物件__type_object物件繼承,從理論上上講,__child_object可以作為任何引數型別是__type_object的函式的引數。

dword getobjcetname(__type_object* lpthis);

那麼,以__child_object物件作為引數是可以的:

__child_object     child;

getobjectname((__type_object*)&child);

C語言實現物件導向示例

用c語言實現物件導向的方法,物件導向的三個基本特徵,物件唯一性,繼承性,抽象性。使用c 語言中的結構體和函式指標將資料與操作放在一起,使得 乙個問題的解決方法封裝在結構體中。其中結構體的巢狀使用實現了繼承性。cpp view plain copy print include include stru...

C語言 實現 物件導向程式設計 OOC

結構體,函式指標,聚合組合等知識。inside the c object model object oriented programming with ansi c 這裡是csdn上前幾章的中文翻譯 wiki上有全部的中英文互譯 不過建議對照英文原著閱讀 這裡有object oriented pro...

C語言實現oop特性

封裝 在c語言中,可以用結構 函式指標來模擬類的實現,而用這種結構定義的變數就是物件。封裝的主要含義是隱藏內部的行為和資訊,使用者只用看到對外提供的介面和公開的資訊。有兩種方法實現封裝 物件導向的最基本的出發點是 將資料以及處理資料的方法封裝在一起 至於繼承 派生 多型之類的則是後面擴充套件的東西。...