前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言结构体实例-创建兔子

C语言结构体实例-创建兔子

作者头像
用户4645519
发布2020-09-07 11:05:29
1K0
发布2020-09-07 11:05:29
举报
文章被收录于专栏:嵌入式学习

参考裸编程思想。

代码语言:javascript
复制
#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;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/08/19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档