已知一个结构体,如何实现制作协议,C语言代码,并举一个示例
时间: 2024-11-15 18:22:07 浏览: 24
C语言 结构体数组详解及示例代码
5星 · 资源好评率100%
在C语言中,虽然没有直接类似于面向对象语言中的"协议"这样的概念,但我们可以通过联合体(union)或结构体(struct)以及函数指针来模拟某种形式的数据结构约束。下面是一个简单的例子,假设我们要创建一个代表动物的协议(实际上是数据定义),其中包含通用的行为函数。
```c
#include <stdio.h>
// 定义一个协议(接口)
typedef enum {
ANIMAL_TYPE_SNAKE = 0,
ANIMAL_TYPE_BIRD,
ANIMAL_TYPE_MAMMAL
} AnimalType;
// 动物行为函数的原型
typedef void (*AnimalAction)(void);
// 动物协议结构体
typedef struct {
AnimalType type;
AnimalAction feed; // 食物处理函数
AnimalAction sleep; // 睡眠函数
AnimalAction display_info; // 显示信息函数
} AnimalProtocol;
// 实现蛇、鸟和哺乳动物的行为
void snake_feed() { printf("Snake is eating.\n"); }
void bird_feed() { printf("Bird is feeding.\n"); }
void mammal_feed() { printf("Mammal is eating.\n"); }
void snake_sleep() { printf("Snake is sleeping.\n"); }
void bird_sleep() { printf("Bird is resting.\n"); }
void mammal_sleep() { printf("Mammal is sleeping.\n"); }
void animal_display_info(AnimalProtocol* animal) {
switch (animal->type) {
case ANIMAL_TYPE_SNAKE:
printf("This is a snake.\n");
break;
case ANIMAL_TYPE_BIRD:
printf("This is a bird.\n");
break;
case ANIMAL_TYPE_MAMMAL:
printf("This is a mammal.\n");
break;
}
}
int main() {
// 创建一个蛇的实例
AnimalProtocol snake = {ANIMAL_TYPE_SNAKE, snake_feed, snake_sleep, animal_display_info};
// 调用动物的行为函数
snake.feed(); // 输出 "Snake is eating."
snake.sleep(); // 输出 "Snake is sleeping."
return 0;
}
阅读全文