C语言如何写类实现教程示例

 更新时间:2023年04月25日 15:53:54   作者:海鲨数据库架构师  
这篇文章主要为大家介绍了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语言如何写类的资料请关注脚本之家其它相关文章!

相关文章

  • C++图像处理之双边滤波

    C++图像处理之双边滤波

    这篇文章主要为大家详细介绍了C++图像处理之双边滤波,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • c语言实现的带通配符匹配算法

    c语言实现的带通配符匹配算法

    这篇文章主要介绍了c语言实现的带通配符匹配算法,需要的朋友可以参考下
    2015-03-03
  • 解决c++ error:crosses initialization of 问题

    解决c++ error:crosses initialization of 问题

    最近在写代码的时候,碰到了 crosses initialization of ... 的问题,只因我在 switch 的某个 case 分支下定义了一个变量,于是乎便将这个问题整理一下,需要的朋友可以参考下
    2023-03-03
  • C语言字符串数组详解

    C语言字符串数组详解

    这篇文章主要介绍了C语言字符串数组详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • c++实现逐行读取配置文件写入内存的示例

    c++实现逐行读取配置文件写入内存的示例

    这篇文章主要介绍了c++实现逐行读取配置文件写入内存的示例,需要的朋友可以参考下
    2014-05-05
  • Qt中Tab与Tree组件实现分页菜单

    Qt中Tab与Tree组件实现分页菜单

    本文主要介绍tabWidget选择夹组件与TreeWidget树形选择组件的常用方法及灵活运用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-12-12
  • C语言实现进程5状态模型的状态机

    C语言实现进程5状态模型的状态机

    状态机在实际工作开发中应用非常广泛,用这幅图就可以很清晰的表达整个状态的流转。本篇通过C语言实现一个简单的进程5状态模型的状态机,让大家熟悉一下状态机的魅力,需要的可以参考一下
    2022-10-10
  • 电脑开机时间的计算代码

    电脑开机时间的计算代码

    这几天我琢磨着一件事,那就是怎么计算我的PC从开机到现在的总时间。终于,看看这个函数:GetTickCount();
    2013-05-05
  • 深入了解C语言指针

    深入了解C语言指针

    这篇文章主要介绍了C语言指针详解及用法示例,介绍了其相关概念,然后分享了几种用法,具有一定参考价值。需要的朋友可以了解下
    2021-07-07
  • C语言编写洗牌发牌程序

    C语言编写洗牌发牌程序

    这篇文章主要为大家详细介绍了C语言编写洗牌发牌程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02

最新评论