以前用C++BUILDER写类非常爽.
【资料图】
类把涉及数据相关的操作打包成一个类.
然后后期开发工程师可以继承啊, 这样提升了开发效率.
不过C语言注重的是执行效率, 类的继承会导致内存的浪费,可能导致性能不佳!
最近继续完善我那个小C,大家还记得小C妹子吗?
对她 就是操空MYSQL的C程序, 我叫她去干删除日志表的工作!
不过最近要对她增加适应工作环境,有的环境需要CA证书,比如说RDS,亚马逊,以及MYSQL自己的证书.
所以对原本的参数需要增加3项.另外的就是原本参数使用的是数组,无法动态根据实际参数大小来存储.有时候浪费很多内存,有的时候数组不会存储结尾字符"\0" 比如说参数char is_ssl[3]; 如何是no则没有问题,YES倒是有问题.丢失了结尾符号.在后面比较的时候就无法判断了.
#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 pArr[i]=NULL; } } //--------------------------------------------------------------------------------------------------------------------- void free_Parameter(Parameter* param ) { for (int i=0;i 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设置成了数据成员,
另外我们再定义两个函数指针成员.
这样我们的类就定义完成了.
接着我们在主函数里面定义类的 参数对象
TParameterParamObj;
这里是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.IPLength:%d\n",strlen(ParamObj.param.ip));
最后我们释放数据成员的内存
ParamObj.free(&ParamObj.param);
我们一般都定义为址传给函数;因为这样非常快;传内存地址也就是4-8字节
而传值 就大于8字节;
strlen(ParamObj.param.ip) 就13个字节!
C语言菜单
C语言的野指针
VSCODE 从相恋到分手
以上就是C语言如何写类实现教程示例的详细内容,更多关于C语言如何写类的资料请关注脚本之家其它相关文章!
上一篇:广西:发布全国首个省级医疗机构输液瓶(袋)回收团体标准|焦点热议
下一篇:最后一页
芍药成了销售“头牌” 康乃馨每枝9元左右 母亲节来临,鲜花热销。过去多年都是康乃馨唱主角,但这两年发生了明显的变化。“5月7日
“谢谢选择我做你的妈妈!” 这封信请18年后查收 扬子晚报讯(通讯员 刘威 记者 朱鼎兆)小时候,母亲常常在家里给我们留字条,
跟新冠病毒“赛跑” 他要让机器人完成核酸检测 经常学生们还不知道我怎么想的时候,我就把自己否定了。工作中需要有自我否定的勇气
助力无接触配送 上海无人车“上岗” 【疫情防控新举措】 科技日报讯 (记者符晓波)眼下,上海疫情蔓延趋势得到有效控制,不少
“态靶辨治” 帮助患者快速转阴 近日,随着患者清零,吉林省长春市北湖奥体中心篮球馆方舱医院等多个方舱陆续“休舱”,各医疗队也
四省市联合医疗队为患者全方位“解忧” 【同心守沪抗疫】 在上海城市足迹馆定点医院的宣传墙上,各类慢性病、基础病的健康宣教手
周美亮: 搜寻野生荞麦的“追种人” ◎本报记者 马爱平 一走进位于国家作物种质库新库内的中国农业科学院作物科学研究所研究员
X 关闭
X 关闭