闲来无事,写一下C语言如何面向对象编程吧:

面向对象编程
/*===========================================================

文件名: class.c
版本:1.0
时间:2017-11-12
作者:连志安
功能:C语言是一个面向过程编程的语言,本程序简单的实现面向对象
的思想,功能较为简陋。


1、如何定义一个类。
其实可以使用C语言的结构体加函数指针来实现。
例如:

struct fat {
int age;
void (*create)(struct fat * this); //创建函数
void (*destroy)(struct fat * this); //销毁函数


void (*write)(struct fat * this); //成员函数
};
typedef struct fat * class_fat; //这一句是必须的,把结构体指针


2、继承:
struct son {
CLASS_FATHER(fat); //继承此父类========= 这里就是继承了

void (*create)(struct son * this); //创建函数
void (*destroy)(struct son * this); //销毁函数


void (*write)(struct son * this); //成员函数
};
typedef struct son * class_son;


3、使用
struct son * son1 = new_class(son1, son); //创建一个实例

son1->write(son1); //调用写函数

del_class(son1); //销毁实例


4、父类函数复写:
class_overwrite(write, son_write); //重写父函数 write. 并用新的son_write函数
//class_def(write); //不重写父函数


剩下的看下面代码,不懂联系 连志安

===========================================================*/

#include <stdio.h>


/*====================================================================
以下是相关宏
====================================================================*/
#define class_size(cls) sizeof(struct cls)

#define CLASS_FATHER(x) struct x * my_father
#define new_class(new, cls) (struct cls *)malloc(class_size(cls)); new->create = cls##_create; new->destroy = cls##_destroy; new->create(new)
#define del_class(new) new->destroy(new); free(new); new = NULL
#define father this->my_father
#define CLASS_FATHER_INIT(cls) father = new_class(father, cls);
#define CLASS_FATHER_DESTROY() del_class(father)

#define class_def(x) this->x = father->x
#define class_overwrite(x, fun) this->x = fun



/*===================================================
父类
===================================================*/

struct fat {
int age;
void (*create)(struct fat * this); //创建函数
void (*destroy)(struct fat * this); //销毁函数


void (*write)(struct fat * this); //成员函数
};
typedef struct fat * class_fat;

//父类写函数
void fat_write(class_fat this)
{
printf("fat_write \r\n");
}

//
void fat_create(class_fat this)
{
this->write = fat_write;
printf("fat_create \r\n");
}

void fat_destroy(class_fat this)
{
printf("fat_destroy \r\n");
}



/*===================================================
子类
===================================================*/
struct son {
CLASS_FATHER(fat); //继承此父类

void (*create)(struct son * this); //创建函数
void (*destroy)(struct son * this); //销毁函数


void (*write)(struct son * this); //成员函数
};
typedef struct son * clas_son;

void son_write(clas_son this)
{
father->write(father); //调用父类的写函数
printf("son_write \r\n");
}


void son_create(clas_son this)
{
CLASS_FATHER_INIT(fat);//声明父类

class_overwrite(write, son_write); //重写父函数
//class_def(write); //不重写父函数
printf("son_create \r\n");
}

void son_destroy(clas_son this)
{
CLASS_FATHER_DESTROY(); //注销父类

printf("son_destroy \r\n");
}





void plubic_write(clas_son son)
{
son->write(son);
}


int main(void)
{
struct son * son1 = new_class(son1, son); //创建一个实例

son1->write(son1); //调用写函数

del_class(son1); //销毁实例

while(1);
return 0;
}