C語言如何寫類實現教程示例

引言

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

類把涉及數據相關的操作打包成一個類.

然後後期開發工程師可以繼承啊, 這樣提升瞭開發效率.

不過C語言註重的是執行效率, 類的繼承會導致內存的浪費,可能導致性能不佳!

最近繼續完善我那個小C,大傢還記得小C妹子嗎?

操空MYSQL的C程序

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

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

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

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

定義個 聯合體+結構體 類型 Parameter

該類型 裡面有個聯合體 字符指針數組 ; 外加一個結構體參數;

數組的作用就是遍歷結構體裡面的指針, 從而可以初始化和釋放內存操作

然後我們再套個結構體類型. 把 Parameter 設置成瞭數據成員,

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

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

接著我們在主函數裡面 定義類的 參數對象

 TParameter ParamObj;

這裡是C 不像C++ 我們需要手工關聯 函數指針成員. 說白點就是給它賦值

關聯上具體函數地址.

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);

我們一般都定義為址傳給函數; 因為這樣非常快; 傳內存地址 也就是4-8字節

而傳值 就大於8字節;

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

C語言菜單

C語言的野指針

VSCODE 從相戀到分手

以上就是C語言如何寫類實現教程示例的詳細內容,更多關於C語言如何寫類的資料請關註WalkonNet其它相關文章!

推薦閱讀: