您好,登錄后才能下訂單哦!
藍鷗iOS培訓講師推薦:要想實現對象編程,就要用C語言來實現,那么今天寫一點關于用C實現面向對象編程的方法。主要有兩方面類的封閉實現和C繼承的實現:
一、類的封閉實現
1、類的定義,其中CLASS()是lw_oopc_kc.h中定義的宏#include"lw_oopc_kc.h"CLASS()
{inta;void(*init)(void*,int);void(*put)(void*);};
2、成員函數的實現類的封裝實質是用借用struct結構體,用函數指針來表示C中類的方法(成員函數)。下面是給類A的方法寫實體函數,如例:
3、類(結構體)中的函數指針與實現函數的關聯通過下面的宏把類的方法(函數指針)和實現函數關聯:CTOR(A)
FUNCTION_SETTING(init,init_A);FUNCTION_SETTING(put,put_A);END_CTOR4、對象的定義、構造和初始化如果沒有這個連接處理,類(實際是struct)中的函數指針就沒有函數的功能。函數init_A()是XXX_A()的命名模式,是指明XXX_A()屬于A類的函數,方便程序的理解和維護。下面就是要構造類。在C中這個工作系統自動調用構造函數實現而在C中,這個過程智能顯示調用來實現。借助lw_oopc_kc.h(或"lw_oopc.h")可以利用宏CLASS_CTOR(class,obj)來將定義的對象進行構造,使之有數據的同時有方法的功能。實例化一個對象分為3步,如下:
//1、定義對象CLASS_CTOR(A,aa1);
//2、構造對象—使得函數指針和函數關聯aa1.init(&aa1,10);
//3、初始化對象的成員變量,注意要:&aa1(取地址)
二、C繼承的實現:
1、子類的定義:在類的開頭借用已經定義的類進行定義一個變量,為了更簡單、清楚,表明是繼承,增加一個宏定義:#defineINHERIT(BASE)IMPLEMENTS(BASE),所以以類B繼承類A為例子如下:CLASS(B){INHERIT(A);
//繼承A類intb;
//子類的成員void(*init)(void*,intx);void(*put)(void*);};
2、子類的成員函數實現,為了方便辨別,類B的成員函數帶后綴‘_B’voidinit_B(void*t,intx,
inty)
{B*cthis=(B*)t;CLASS_CTOR(A,cthis->A);//——繼承的基類在這里構造,對象是cthis
->Acthis->A.init(&cthis->A,x);//——</SPA<div>
每段程序后面都有注釋,就是為了能夠更好的讓同學們理解本節所講的內容,也希望所寫的東西能夠幫助到同學們。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。