这篇文章主要为大家介绍了C语言如何写类的实现教程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
引言
以前用C++BUILDER 写类非常爽.
类把涉及数据相关的操作打包成一个类.
然后后期开发工程师可以继承啊, 这样提升了开发效率.
不过C语言注重的是执行效率, 类的继承会导致内存的浪费,可能导致性能不佳!
最近继续完善我那个小C,大家还记得小C妹子吗?
操空MYSQL的C程序
对她 就是操空MYSQL的C程序, 我叫她去干删除日志表的工作!
不过最近要对她增加适应工作环境,有的环境需要CA证书,比如说RDS,亚马逊,以及MYSQL自己的证书.
所以对原本的参数需要增加3项. 另外的就是原本参数使用的是数组,无法动态根据实际参数大小来存储.有时候浪费很多内存,有的时候数组不会存储结尾字符'\0' 比如说参数 char is_ssl[3]; 如何是no则没有问题,YES倒是有问题.丢失了结尾符号.在后面比较的时候就无法判断了.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include
#include
#include
#include
#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 { param->pArr[i]=NULL; } } //--------------------------------------------------------------------------------------------------------------------- void free_Parameter(Parameter* param ) { for (int i=0;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语言如何写类的资料请关注我,后续还会有更新,也希望大家多多指点