c结构体定义不同接口
时间: 2023-10-08 14:06:27 浏览: 130
C 语言中的结构体可以通过不同的方式来定义接口,以下是两种常见的方式:
1. 函数指针:
可以在结构体中定义一个函数指针成员,该函数指针指向一个函数,表示该结构体具有某个特定的行为。例如,定义一个动物结构体,其中有一个 eat() 函数指针成员,不同的动物可以有不同的 eat() 行为:
```
struct Animal {
char* name;
void (*eat)(struct Animal* self);
};
void cat_eat(struct Animal* self) {
printf("%s eats fish\n", self->name);
}
void dog_eat(struct Animal* self) {
printf("%s eats bone\n", self->name);
}
int main() {
struct Animal cat = {"Tom", cat_eat};
struct Animal dog = {"Lassie", dog_eat};
cat.eat(&cat); // Tom eats fish
dog.eat(&dog); // Lassie eats bone
return 0;
}
```
2. 函数作为结构体成员:
可以在结构体中定义一个函数成员,该函数作为结构体的一部分,可以访问结构体的其他成员,表示该结构体具有某个特定的行为。例如,定义一个人结构体,其中有一个 say_hello() 函数成员,表示该人可以向其他人打招呼:
```
struct Person {
char* name;
int age;
void (*say_hello)(struct Person* self, struct Person* other);
};
void say_hello(struct Person* self, struct Person* other) {
printf("%s says hello to %s\n", self->name, other->name);
}
int main() {
struct Person alice = {"Alice", 20, say_hello};
struct Person bob = {"Bob", 22, say_hello};
alice.say_hello(&alice, &bob); // Alice says hello to Bob
bob.say_hello(&bob, &alice); // Bob says hello to Alice
return 0;
}
```
这两种方式都可以用来定义结构体的接口,具体选择哪种方式取决于具体的需求和设计。
阅读全文