经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C 语言 » 查看文章
C语言如何写类实现教程示例
来源:jb51  时间:2023/4/26 8:50:09  对本文有异议

引言

以前用C++BUILDER  写类非常爽.

类把涉及数据相关的操作打包成一个类.

然后后期开发工程师可以继承啊, 这样提升了开发效率.

不过C语言注重的是执行效率, 类的继承会导致内存的浪费,可能导致性能不佳!

最近继续完善我那个小C,大家还记得小C妹子吗?

操空MYSQL的C程序

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

不过最近要对她增加适应工作环境,有的环境需要CA证书,比如说RDS,亚马逊,以及MYSQL自己的证书.

所以对原本的参数需要增加3项. 另外的就是原本参数使用的是数组,无法动态根据实际参数大小来存储.有时候浪费很多内存,有的时候数组不会存储结尾字符'\0' 比如说参数 char is_ssl[3]; 如何是no则没有问题,YES倒是有问题.丢失了结尾符号.在后面比较的时候就无法判断了.

  1. #include?<stdio.h>
  2. #include?<stdlib.h>
  3. #include?<string.h>
  4. #include?<malloc.h>
  5.  
  6. #define?KEYSIZE?15
  7.  
  8. typedef?struct?
  9. {
  10. ?union?{
  11. ??struct?{????
  12. ????????????char*?ip;
  13. ????????????char*?user;
  14. ????????????char*?port;
  15. ????????????char*?passwd;
  16. ????????????char*?schema;
  17. ????????????char*?table_name;
  18. ????????????char*?limit_rows;
  19. ????????????char*?total_sql;
  20. ????????????char*?del_sql;
  21. ????????????char*?logfile;
  22. ????????????char*?is_ssl;
  23. ????????????char*?client_cert;
  24. ????????????char*?client_key;
  25. ????????????char*?ca_cert;
  26. ????????????char*?is_debug;?
  27. ????????????}??;
  28. ???char?*pArr[KEYSIZE];
  29. ?};?????????????
  30. }?Parameter;
  31.  
  32. typedef?struct
  33. {
  34. ??Parameter?param;
  35. ??void?(*init)?(Parameter*?param?);
  36. ??void?(*free)?(Parameter*?param?);
  37. }TParameter;
  38.  
  39. //---------------------------------------------------------------------------------------------------------------------
  40.  
  41. void?init_Paramter(Parameter*?param?)
  42. {
  43. ??for(int?i=0;i<KEYSIZE;?i++)
  44. ?{
  45. ????param->pArr[i]=NULL;
  46. ?}
  47. }???
  48.  
  49. //---------------------------------------------------------------------------------------------------------------------
  50. void?free_Parameter(Parameter*?param?)
  51. {
  52. ?for?(int?i=0;i<KEYSIZE;i++)
  53. ?{
  54. ????free?(param->pArr[i]);
  55. ????param->pArr[i]=NULL;
  56. ?}
  57. }
  58.  
  59.  
  60. int?main()
  61. {
  62. ??TParameter?ParamObj;
  63. ??ParamObj.init=init_Paramter;
  64. ??ParamObj.free=free_Parameter;?
  65. ??ParamObj.init(&ParamObj.param);
  66.  
  67. ??ParamObj.param.ip=?calloc(sizeof(char),strlen("192.168.0.155")+1);
  68. ??strcpy(ParamObj.param.ip,"192.168.0.155");
  69. ??
  70. ??printf("ParamObj.IP:%s\n",ParamObj.param.ip);
  71. ??printf("ParamObj.IP?Length:%d\n",strlen(ParamObj.param.ip));
  72. ??ParamObj.free(&ParamObj.param);
  73. ????return?0;
  74. }

定义个 联合体+结构体 类型 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语言如何写类的资料请关注w3xue其它相关文章!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号