C語(yǔ)言如何寫(xiě)類(lèi)實(shí)現(xiàn)教程示例
引言
以前用C++BUILDER 寫(xiě)類(lèi)非常爽.
類(lèi)把涉及數(shù)據(jù)相關(guān)的操作打包成一個(gè)類(lèi).
然后后期開(kāi)發(fā)工程師可以繼承啊, 這樣提升了開(kāi)發(fā)效率.
不過(guò)C語(yǔ)言注重的是執(zhí)行效率, 類(lèi)的繼承會(huì)導(dǎo)致內(nèi)存的浪費(fèi),可能導(dǎo)致性能不佳!
最近繼續(xù)完善我那個(gè)小C,大家還記得小C妹子嗎?
操空MYSQL的C程序
對(duì)她 就是操空MYSQL的C程序, 我叫她去干刪除日志表的工作!
不過(guò)最近要對(duì)她增加適應(yīng)工作環(huán)境,有的環(huán)境需要CA證書(shū),比如說(shuō)RDS,亞馬遜,以及MYSQL自己的證書(shū).
所以對(duì)原本的參數(shù)需要增加3項(xiàng). 另外的就是原本參數(shù)使用的是數(shù)組,無(wú)法動(dòng)態(tài)根據(jù)實(shí)際參數(shù)大小來(lái)存儲(chǔ).有時(shí)候浪費(fèi)很多內(nèi)存,有的時(shí)候數(shù)組不會(huì)存儲(chǔ)結(jié)尾字符'\0' 比如說(shuō)參數(shù) char is_ssl[3]; 如何是no則沒(méi)有問(wèn)題,YES倒是有問(wèn)題.丟失了結(jié)尾符號(hào).在后面比較的時(shí)候就無(wú)法判斷了.
#include?<stdio.h> #include?<stdlib.h> #include?<string.h> #include?<malloc.h> #define?KEYSIZE?15 typedef?struct? { ?union?{ ??struct?{???? ????????????char*?ip; ????????????char*?user; ????????????char*?port; ????????????char*?passwd; ????????????char*?schema; ????????????char*?table_name; ????????????char*?limit_rows; ????????????char*?total_sql; ????????????char*?del_sql; ????????????char*?logfile; ????????????char*?is_ssl; ????????????char*?client_cert; ????????????char*?client_key; ????????????char*?ca_cert; ????????????char*?is_debug;? ????????????}??; ???char?*pArr[KEYSIZE]; ?};????????????? }?Parameter; typedef?struct { ??Parameter?param; ??void?(*init)?(Parameter*?param?); ??void?(*free)?(Parameter*?param?); }TParameter; //--------------------------------------------------------------------------------------------------------------------- void?init_Paramter(Parameter*?param?) { ??for(int?i=0;i<KEYSIZE;?i++) ?{ ????param->pArr[i]=NULL; ?} }??? //--------------------------------------------------------------------------------------------------------------------- void?free_Parameter(Parameter*?param?) { ?for?(int?i=0;i<KEYSIZE;i++) ?{ ????free?(param->pArr[i]); ????param->pArr[i]=NULL; ?} } int?main() { ??TParameter?ParamObj; ??ParamObj.init=init_Paramter; ??ParamObj.free=free_Parameter;? ??ParamObj.init(&ParamObj.param); ??ParamObj.param.ip=?calloc(sizeof(char),strlen("192.168.0.155")+1); ??strcpy(ParamObj.param.ip,"192.168.0.155"); ?? ??printf("ParamObj.IP:%s\n",ParamObj.param.ip); ??printf("ParamObj.IP?Length:%d\n",strlen(ParamObj.param.ip)); ??ParamObj.free(&ParamObj.param); ????return?0; }
定義個(gè) 聯(lián)合體+結(jié)構(gòu)體 類(lèi)型 Parameter
該類(lèi)型 里面有個(gè)聯(lián)合體 字符指針數(shù)組 ; 外加一個(gè)結(jié)構(gòu)體參數(shù);
數(shù)組的作用就是遍歷結(jié)構(gòu)體里面的指針, 從而可以初始化和釋放內(nèi)存操作
然后我們?cè)偬讉€(gè)結(jié)構(gòu)體類(lèi)型. 把 Parameter 設(shè)置成了數(shù)據(jù)成員,
另外我們?cè)俣x兩個(gè)函數(shù)指針成員.
這樣我們的類(lèi)就定義完成了.
接著我們?cè)谥骱瘮?shù)里面 定義類(lèi)的 參數(shù)對(duì)象
TParameter ParamObj;
這里是C 不像C++ 我們需要手工關(guān)聯(lián) 函數(shù)指針成員. 說(shuō)白點(diǎn)就是給它賦值
關(guān)聯(lián)上具體函數(shù)地址.
ParamObj.init=init_Paramter;
ParamObj.free=free_Parameter;
接著我們通過(guò)函數(shù)來(lái)初始化我們的參數(shù)數(shù)據(jù)
ParamObj.init(&ParamObj.param);
然后就是我們正式的對(duì)數(shù)據(jù)成員動(dòng)態(tài)分配堆內(nèi)存
ParamObj.param.ip= calloc(sizeof(char),strlen("192.168.0.155")+1);
strcpy(ParamObj.param.ip,"192.168.0.155");
接下來(lái)就是 對(duì)數(shù)據(jù)成員的使用
printf("ParamObj.IP:%s\n",ParamObj.param.ip);
printf("ParamObj.IP Length:%d\n",strlen(ParamObj.param.ip));
最后我們釋放數(shù)據(jù)成員的內(nèi)存
ParamObj.free(&ParamObj.param);
我們一般都定義為址傳給函數(shù); 因?yàn)檫@樣非??? 傳內(nèi)存地址 也就是4-8字節(jié)
而傳值 就大于8字節(jié);
strlen(ParamObj.param.ip) 就13個(gè)字節(jié)!
以上就是C語(yǔ)言如何寫(xiě)類(lèi)實(shí)現(xiàn)教程示例的詳細(xì)內(nèi)容,更多關(guān)于C語(yǔ)言如何寫(xiě)類(lèi)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解C++成員函數(shù)的override和final說(shuō)明符的用法
這篇文章主要介紹了詳解C++成員函數(shù)的override和final說(shuō)明符的用法,分別用于重寫(xiě)和禁止繼承類(lèi),要的朋友可以參考下2016-01-01c++ 開(kāi)發(fā)中如何讀寫(xiě)yaml配置文件
這篇文章主要介紹了c++ 開(kāi)發(fā)中如何讀寫(xiě)yaml配置文件,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04C語(yǔ)言實(shí)現(xiàn)大數(shù)值金額大寫(xiě)轉(zhuǎn)換的方法詳解
這篇文章主要為大家詳細(xì)介紹了如何利用C語(yǔ)言實(shí)現(xiàn)大數(shù)值金額大寫(xiě)轉(zhuǎn)換的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-03-03一文帶你學(xué)習(xí)C/C++中的<Windows.h>庫(kù)
c語(yǔ)言 #include<windows.h>是寫(xiě)window程序需要的重要頭文件,下面這篇文章主要給大家介紹了C/C++中<Windows.h>庫(kù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01