欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言如何寫類實現(xiàn)教程示例

 更新時間:2023年04月25日 15:53:54   作者:海鯊數(shù)據(jù)庫架構(gòu)師  
這篇文章主要為大家介紹了C語言如何寫類的實現(xiàn)教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

引言

以前用C++BUILDER  寫類非常爽.

類把涉及數(shù)據(jù)相關(guān)的操作打包成一個類.

然后后期開發(fā)工程師可以繼承啊, 這樣提升了開發(fā)效率.

不過C語言注重的是執(zhí)行效率, 類的繼承會導致內(nèi)存的浪費,可能導致性能不佳!

最近繼續(xù)完善我那個小C,大家還記得小C妹子嗎?

操空MYSQL的C程序

對她 就是操空MYSQL的C程序, 我叫她去干刪除日志表的工作!

不過最近要對她增加適應工作環(huán)境,有的環(huán)境需要CA證書,比如說RDS,亞馬遜,以及MYSQL自己的證書.

所以對原本的參數(shù)需要增加3項. 另外的就是原本參數(shù)使用的是數(shù)組,無法動態(tài)根據(jù)實際參數(shù)大小來存儲.有時候浪費很多內(nèi)存,有的時候數(shù)組不會存儲結(jié)尾字符'\0' 比如說參數(shù) char is_ssl[3]; 如何是no則沒有問題,YES倒是有問題.丟失了結(jié)尾符號.在后面比較的時候就無法判斷了.

#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;
}

定義個 聯(lián)合體+結(jié)構(gòu)體 類型 Parameter

該類型 里面有個聯(lián)合體 字符指針數(shù)組 ; 外加一個結(jié)構(gòu)體參數(shù);

數(shù)組的作用就是遍歷結(jié)構(gòu)體里面的指針, 從而可以初始化和釋放內(nèi)存操作

然后我們再套個結(jié)構(gòu)體類型. 把 Parameter 設置成了數(shù)據(jù)成員,

另外我們再定義兩個函數(shù)指針成員.

這樣我們的類就定義完成了. 

接著我們在主函數(shù)里面 定義類的 參數(shù)對象

 TParameter ParamObj;

這里是C 不像C++ 我們需要手工關(guān)聯(lián) 函數(shù)指針成員. 說白點就是給它賦值

關(guān)聯(lián)上具體函數(shù)地址.

ParamObj.init=init_Paramter; 
 ParamObj.free=free_Parameter; 

接著我們通過函數(shù)來初始化我們的參數(shù)數(shù)據(jù)

ParamObj.init(&ParamObj.param);

然后就是我們正式的對數(shù)據(jù)成員動態(tài)分配堆內(nèi)存

ParamObj.param.ip= calloc(sizeof(char),strlen("192.168.0.155")+1);  

strcpy(ParamObj.param.ip,"192.168.0.155");

接下來就是 對數(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ù); 因為這樣非??? 傳內(nèi)存地址 也就是4-8字節(jié)

而傳值 就大于8字節(jié);

strlen(ParamObj.param.ip) 就13個字節(jié)!

C語言菜單

C語言的野指針

VSCODE 從相戀到分手

以上就是C語言如何寫類實現(xiàn)教程示例的詳細內(nèi)容,更多關(guān)于C語言如何寫類的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C語言:十進制,BCD碼互換詳解

    C語言:十進制,BCD碼互換詳解

    這篇文章主要介紹了C語言十進制,BCD碼互換實例,小編覺得這篇文章寫的還不錯,實例簡單明了,需要的朋友可以參考下
    2021-09-09
  • C++中的數(shù)據(jù)內(nèi)存分布原理

    C++中的數(shù)據(jù)內(nèi)存分布原理

    這篇文章主要介紹了C++中的數(shù)據(jù)內(nèi)存分布,主要從動態(tài)內(nèi)存管理方式,內(nèi)存泄漏等方面介紹的,文中也有相關(guān)的示例代碼,需要的朋友可以參考下
    2023-05-05
  • 詳解C++成員函數(shù)的override和final說明符的用法

    詳解C++成員函數(shù)的override和final說明符的用法

    這篇文章主要介紹了詳解C++成員函數(shù)的override和final說明符的用法,分別用于重寫和禁止繼承類,要的朋友可以參考下
    2016-01-01
  • Qt視頻播放器的實現(xiàn)示例

    Qt視頻播放器的實現(xiàn)示例

    本文主要介紹了Qt視頻播放器的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-08-08
  • Opencv透視變換綜合實例詳解

    Opencv透視變換綜合實例詳解

    這篇文章主要為大家詳細介紹了Opencv透視變換綜合實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • C++中的常量定義小結(jié)

    C++中的常量定義小結(jié)

    在C++中,并不提倡使用#define定義一個常量。#define本質(zhì)上是一個預處理器指令,它僅僅表示使用一個串代替別一個串而已。也就是說,#define定義的常量從未被編譯器看到——它們在編譯器開始處理源碼之前就被移走了
    2015-08-08
  • c++ 開發(fā)中如何讀寫yaml配置文件

    c++ 開發(fā)中如何讀寫yaml配置文件

    這篇文章主要介紹了c++ 開發(fā)中如何讀寫yaml配置文件,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • C語言頭文件<string.h>函數(shù)詳解

    C語言頭文件<string.h>函數(shù)詳解

    本文主要介紹了C語言頭文件<string.h>函數(shù)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • C語言實現(xiàn)大數(shù)值金額大寫轉(zhuǎn)換的方法詳解

    C語言實現(xiàn)大數(shù)值金額大寫轉(zhuǎn)換的方法詳解

    這篇文章主要為大家詳細介紹了如何利用C語言實現(xiàn)大數(shù)值金額大寫轉(zhuǎn)換的功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-03-03
  • 一文帶你學習C/C++中的<Windows.h>庫

    一文帶你學習C/C++中的<Windows.h>庫

    c語言 #include<windows.h>是寫window程序需要的重要頭文件,下面這篇文章主要給大家介紹了C/C++中<Windows.h>庫的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-01-01

最新評論