在物件導向程式設計中,簡單工廠模式是最常用的設計模式之一。所謂簡單工廠模式就是借助物件導向語言的多型特性,根據不同的輸入要求輸出例項化後的具體操作子類指標。通俗來講,就是根據輸入需求加工出對應輸出子類物件。
在c語言中本沒有物件導向的實現機制,更沒有多型的實現方法,但我們仍可以按照物件導向的程式設計思想來進行開發。比如可以借助結構體將變數和函式指標封裝在一起實現封裝;通過結構體巢狀實現繼承(具體實現可參考我之前的部落格);借助二重指標實現多型;雖說c語言實現上較c++等物件導向語言麻煩些,但程式設計的思想是通用的,畢竟linux核心原始碼中使用了大量的物件導向程式設計思想,精妙之處,溢於言表。
簡單介紹:下面**借助了二重指標按照簡單工廠模式實現了乙個計算器,其核心思想就在於對二重指標的運用,這裡簡單解釋為:通過傳入函式指標的指標,從而實現對函式指標的明確指向(也可以理解為例項化)。傳入二重指標實際上改變的並不是該指標變數本身的位址,而是改變其指向的位址,因此改變之後按照函式呼叫的方式對其解引用的結果自然也就不同了。
#include
#include
#include
//add函式
intadd
(int a,
int b)
//sub函式
intsub
(int a,
int b)
//mul函式
intmul
(int a,
int b)
//dev函式
intdev
(int a,
int b)
/** * @brief 操作工廠,會將輸入的函式指標指向不同的實現函式(經過工廠加工,函式指標例項化為不同的函式物件)
* * @param pfunc:指標變數,用來指向執行的函式(在該函式中會被修改)
* oper: '+','-','*','/'運算子
* * @return void
* */
void
factory
(int(*
*pfunc)
(int
,int),
char oper)
}//輸入1 2 3 4分別代表指向+ - * /操作
intmain
(int argc,
char
*ar**)
switch
(atoi
(ar**[1]
))//根據函式指標執行具體的函式
result =
(*pfunc)(2
,3);
printf
("result = %d\r\n"
,result)
;//輸出結果
return0;
}
該函式是在linux環境下指執行的:
1.+測試
輸入:.
/a.out 1
輸出:5
2.+測試
輸入:.
/a.out 2
輸出:-13.
+測試輸入:.
/a.out 3
輸出:6
4.+測試
輸入:.
/a.out 4
輸出:0
C語言之函式指標和二重函式指標
在分析uboot程式時發現乙個函式指標的用法,花了點時間研究一下。做個記錄。先說一下函式指標的基本用法。如下 int init01 void typedef int init func1 void 宣告一種函式型別 typedef int init func2 void 宣告一種函式指標型別 int...
C語言指標用法詳解 (三) 二重指標
二重指標 int ptr1 null cout 1 三省指標 指標 ptr1 的型別是 int 指向的型別 int 指定為空 2 ptr1 是 ptr 指向的指向 即空的指向,非法 3 ptr1 是 ptr 指向的指向的指向 即空的指向的指向,非法 1 三省指標 指標 p 的型別是 int 指向的型...
C基礎 二重指標和陣列指標
include int main1 void void fun char arr,int n void fun char arr,int n 二重指標傳參時等價於指標陣列 int main void fun s,3 return0 include int main1 void int p int p...