C语言结构体实例-创建兔子
参考裸编程思想。
#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;
}
C语言结构体实例-创建兔子的更多相关文章
- 失落的C语言结构体封装艺术
Eric S. Raymond <esr@thyrsus.com> 目录 1. 谁该阅读这篇文章 2. 我为什么写这篇文章 3.对齐要求 4.填充 5.结构体对齐及填充 6.结构体重排序 ...
- (转)失落的C语言结构体封装艺术
目录1. 谁该阅读这篇文章 2. 我为什么写这篇文章 3.对齐要求 4.填充 5.结构体对齐及填充 6.结构体重排序 7.难以处理的标量的情况 8.可读性和缓存局部性 9.其他封装的技术 10.工具 ...
- Linux C语言结构体-学习笔记
Linux C语言结构体简介 前面学习了c语言的基本语法特性,本节进行更深入的学习. 预处理程序. 编译指令: 预处理, 宏定义, 建立自己的数据类型:结构体,联合体,动态数据结构 c语言表达式工具 ...
- GO语言学习(十六)Go 语言结构体
Go 语言结构体 Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型. 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合. 结构体表示一项记录,比如保存图 ...
- 06. Go 语言结构体
Go语言结构体(struct) Go 语言通过用自定义的方式形成新的类型,结构体是类型中带有成员的复合类型.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. Go 语言中的类 ...
- Go 语言 结构体
Go 语言 结构体 引言Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型结构体是由一系列具有相同类型或不同类型的数据构成的数据集合结构体表示一项记录,比如保存图书 ...
- 解析C语言结构体对齐(内存对齐问题)
C语言结构体对齐也是老生常谈的话题了.基本上是面试题的必考题.内容虽然很基础,但一不小心就会弄错.写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的 ...
- c语言结构体3之结构体嵌套
注意: 1结构体内部再次定义一个结构体 但是没有创建结构体的实例 也就是说再次定义的结构体内部的变量会被当做母结构体的成员变量 struct tianchao { int data; ]; stru ...
- Go语言结构体(struct)
Go 语言结构体 Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型. 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合. 结构体表示一项记录,比如保存图 ...
随机推荐
- springBoot相关(一)
2.0新特性: 编程语言: Java8+.Kotlin 底层框架:Spring Framwork 5.0.x 全新特性: web Flux web Flux: 函数编程:java 8 Lambda 响 ...
- vagrant(二)配置文件vagrantfile详解 以及安装php、nginx、mysql
上一篇文章完整的讲叙了如何安装一个vagrant的环境.这里主要说一说vagrant的配置文件Vagrantfile. 一 配置详解 在我们的开发目录下有一个文件Vagrantfile,里面包含有大量 ...
- 0-3为变长序列建模modeling variable length sequences
在本节中,我们会讨论序列的长度是变化的,也是一个变量 we would like the length of sequence,n,to alse be a random variable 一个简单的 ...
- 【leetcode】331. Verify Preorder Serialization of a Binary Tree
题目如下: One way to serialize a binary tree is to use pre-order traversal. When we encounter a non-null ...
- css3的三大特性以及移动端说明
css3的三大特性: 一.层叠性 所谓层叠性是指多种CSS样式的叠加. 是浏览器处理冲突的一个能力,如果一个属性通过两个相同选择器设置到同一个元素上,那么这个时候一个属性就会将另一个属性层叠掉 比如先 ...
- Golang操作MySQL的正确姿势
封装原因: 查看了很多网上提供的ORM类型的数据库操作,觉得比较麻烦,需要提前配置很多的表结构体,然后才能使用,对于数据表很多的项目就配置起来就比较麻烦,所以对golang的mysql包进行了外层包装 ...
- Window随笔 - Windows Server 2012 評估版與延長使用期限【转载】
Windows Server 2012 評估版與延長使用期限 下載與安裝 至 微軟的評估中心 下載 Windows Server 2012 SP1 180 天軟體試用版 (Windows Server ...
- mongo 慢查询配置
我是分片部署,所以慢查询相关的配置是在启动片服务上. 执行查询命令,是在share的primary 上. 1. mongodb慢查询 配置 慢查询数据主要存储在 local库的system.pro ...
- 面试题57:数组中2个数的和(也是leetcode题目)
题目:给定一个整数数列,找出其中和为特定值的那两个数. 你可以假设每个输入都只会有一种答案,同样的元素不能被重用. 示例: 给定 nums = [2, 7, 11, 15], target = 9 因 ...
- 继承Process类,run函数的简单使用
#定义一个类 继承Process类 from multiprocessing import Process import os import time class Download(Process): ...