zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    gdb coredum 信息例子
    leecode第一百一十四题(二叉树展开为链表)
    leecode第一百零一题(对称二叉树)
    leecode第九十四题(二叉树的中序遍历)
    leecode第七十五题(颜色分类)
    leecode第五十五题(跳跃游戏)
    leecode第四十九题(字母异位词分组)
    leecode第四十八题(旋转图像)
    leecode第三十四题(在排序数组中查找元素的第一个和最后一个位置)
    leecode第三十一题(下一个排列)
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12007457.html
Copyright © 2011-2022 走看看