用C語言模擬多態,模擬場景:父類Animal有speak方法,子類Dog跟Cat也各有自己的speak方法
时间: 2024-09-08 08:03:30 浏览: 62
在C语言中,由于其静态类型特性,不像面向对象语言那样直接支持多态,但我们可以模拟多态的行为通过函数指针或者结构体的方法来实现。这里可以创建一个通用的父类Animal,然后定义两个子类Dog和Cat,它们都有各自的`speak`方法。
首先,我们定义一个Animal的结构体,包含一个指向void(*)()类型的成员,表示它的行为:
```c
typedef void (*SpeakFunction)(void);
typedef struct {
SpeakFunction speak;
} Animal;
// 父类Animal的speak方法模板
void animal_speak(Animal* animal) {
animal->speak();
}
```
然后,为Dog和Cat定义`speak`方法并设置在Animal结构体中:
```c
// 子类Dog
struct Dog {
char name[50];
};
void dog_speak(Animal* animal) {
printf("Dog says: Hello!\n");
}
// 子类Cat
struct Cat {
char name[50];
};
void cat_speak(Animal* animal) {
printf("Cat says: Meow!\n");
}
// 动态分配并绑定方法
Animal animal_dog = {dog_speak};
Animal animal_cat = {cat_speak};
```
在这个场景下,虽然C语言本身不支持多态,但你可以通过这种方式间接地实现类似的功能。当你需要让动物发声时,可以调用`animal_speak`,它会根据传入的具体Animal实例调用相应的`speak`方法。
阅读全文