让别人做网站需要注意什么问题,查建设公司年度保证金网站,成都微信网站建设多少,宁波集团网站建设c语言_实现类class的功能 实例 1.需求与背景2.实例1.类的头文件 class_A.h2.类的实现 class_A.c3.引用4.编译与运行 3.总结 1.需求与背景
使用C , python语言久了, 发现 类 class写代码逻辑更方便, 简洁. 封装的API更加易用; 内核代码中, 也经常看到类似类的封装. 自己尝试实现… c语言_实现类class的功能 实例 1.需求与背景2.实例1.类的头文件 class_A.h2.类的实现 class_A.c3.引用4.编译与运行 3.总结 1.需求与背景
使用C , python语言久了, 发现 类 class写代码逻辑更方便, 简洁. 封装的API更加易用; 内核代码中, 也经常看到类似类的封装. 自己尝试实现一个C语言类的功能
2.实例
目录结构: main.c class_A.c class_A.h
1.类的头文件 class_A.h
class_A.h
#pragma once
#ifndef __class_A_h__
#define __class_A_h__typedef struct {int age;char name[32];int (*get_age)();char* (*get_name)();
}class_A;int class_A_init(class_A* self, int age, char* name);
void class_A_destroy(class_A* self);
class_A* new_class_A(int age, char* name);
void free_class_A(class_A* self);#endif2.类的实现 class_A.c
class_A.c
#include string.h
#include stdlib.h
#include class_A.hstatic int _get_age(class_A* self) {return self-age;
};static char* _get_name(class_A* self) {return self-name;
};int class_A_init(class_A* self, int age, char* name)
{self-age age;memcpy(self-name, name, sizeof(self-name) - 1);self-get_age _get_age;self-get_name _get_name;return 0;
}void class_A_destroy(class_A* self)
{}class_A* new_class_A(int age, char* name)
{class_A* p malloc(sizeof(class_A));if (p NULL)return NULL;class_A_init(p, age, name);return p;
}void free_class_A(class_A* self)
{class_A_destroy(self);free(self);self NULL;
}
3.引用
main.c
#include stdio.h
#include string.h
#include stdlib.h
#include class_A.hint main()
{// 栈-局部变量方式class_A a;class_A_init(a,18,lili);printf(a name%s, age%d\n, a.get_name(a), a.get_age(a));class_A_destroy(a);// 堆-申请内存方式class_A* b new_class_A(19, Malike);if (b) {printf(b name%s, age%d\n, b-get_name(b), b-get_age(b));free_class_A(b);}return 0;
}4.编译与运行
gcc main.c class_A.c ./a.out a namelili, age18 b nameMalike, age19 3.总结
调用类的成员函数, 都要带一个类的指针 类似C 的 this , python 的 self如果这个事情交给编译器做, 编码会快乐,简单一点 get_name static _get_name 封装形式, 提高API 简洁性class_A_get_name 与 class_A.get_name 相比, class_A.get_name API调用方式, 看起来有层次性 我个人是比较推崇c with class也支持未来c语法, 支持类class的语法 C语言支持类的实现; 但C/python 原生支持类的编写, 编码更简易方便目前C在项目中只使用了1年, 很多C语法还不了解, 自认C属于c with class的水平, 但感觉C开发挺好用的, 没有大家说的那么难用. 只是c/c的内存问题, 确实遇到很多次, 前期开发有遇到, 项目中期一些场景, 特定条件下也会有.虽然本人熟悉gdb, valgrind可以快速定位排查内存问题, 但也要花费时间debug, 排雷踩坑, 也经常怀疑自己为什么会犯这个错. 大胆猜测, C创始人 写了很多这种代码与封装API, 才发明C, 原生支持类的语法