参考裸编程思想。
#include <stdio.h>
//#include "ycjobject.h"
// 颜色定义
#define CL_BLACK 0
#define CL_WHITE 1
#define CL_GRAY 2
// 物种身份ID定义
#define ID_GRASS 0x0001
#define ID_CARROT 0x0002
#define ID_GREENVEGETABLE 0x0004
#define ID_RABBIT 0x0010
#define ID_FISH 0x0020
#define ID_WOLF 0x0100
// 空指针定义
#define NIL 0
// 函数指针类型定义
typedef char (*teat)(unsigned food);
typedef void (*trun)(void);
typedef unsigned (*species)(void);
// 兔子类
struct TRabbit
{
species id; // 类的类型标识
species food; // 食物常量
species enemy; // 敌人常量
unsigned char color; // 颜色变量
float weight; // 重量变量,以千克为单位
unsigned char age; // 年龄变量,以月为单位
teat Eat; // 吃行为
trun Run; // 跑行为
};
// ===== implement =====
// 功能:返回兔子的类型
// 参数:无
// 返回:兔子的类型
// 备注:
unsigned rabbitId(void)
{
return ID_RABBIT;
}
// 功能:返回兔子的食物
// 参数:无
// 返回:兔子的食物
// 备注:多种食物一次返回
unsigned rabbitFood(void)
{
return ID_GRASS|ID_CARROT|ID_GREENVEGETABLE;
}
// 功能:返回兔子的敌人
// 参数:无
// 返回:兔子的敌人
// 备注:多种敌人一次返回
unsigned rabbitEnemy(void)
{
return ID_WOLF;
}
// 功能:兔子吃
// 参数:food,unsigned类型,喂给兔子的食物
// 返回:0:没吃成
// 1:吃成了
// 备注:
char rabbitEat(unsigned food)
{
// 都说兔子不吃窝边草
// 那么不是窝边的草就可以吃
// 它兔窝边的草不是我窝边的草,所以也可以吃
// 还有,萝卜和青菜,也可以吃
// 兔子不能吃兔子,不能吃鱼,更不能吃狼
return (food & 0x0007);
}
// 功能:兔子跑
// 参数:无
// 返回:无
// 备注:
void rabbitRun(void)
{
// 可以蹦
// 可以跳
// 可以跑
}
// 功能:兔子类创建
// 参数:aRabbit,TRabbit类型,一只兔子
// 返回:无
// 备注:
void rabbitCreate(struct TRabbit *obj)
{
// 常量初始化
obj->id = rabbitId;
obj->food = rabbitFood;
obj->enemy = rabbitEnemy;
// 变量初始化
// 因为变量初始化没有意义,所以不做
// 行为(方法)初始化
obj->Eat = rabbitEat;
obj->Run = rabbitRun;
}
int main(void)
{
// 申请对象空间-兔子1
struct TRabbit Rabbit1;
// 申请对象空间-兔子2
struct TRabbit Rabbit2;
// 创建兔子1对象
rabbitCreate(&Rabbit1);
Rabbit1.color = CL_WHITE;
Rabbit1.weight = 1.03;
Rabbit1.age = 3;
// 创建兔子2对象
rabbitCreate(&Rabbit2);
Rabbit2.color = CL_GRAY;
Rabbit2.weight = 1.28;
Rabbit2.age = 4;
// 兔子1吃萝卜
Rabbit1.Eat(ID_CARROT);
// 兔子2跑
Rabbit2.Run();
return 0;
}