用c语言编写上述代码
时间: 2024-09-13 10:08:31 浏览: 24
<<您好!在C语言中,虽然没有像面向对象编程语言中的类和继承这样的概念,但是我们可以通过结构体(struct)和函数指针来模拟多态的行为。下面是一个简单的示例:
首先,我们可以定义一个结构体来表示基类,然后在该结构体中包含一个函数指针,指向实现具体功能的函数。
```c
#include <stdio.h>
#include <stdlib.h>
// 定义基类结构体
typedef struct Base {
void (*func)(struct Base*); // 函数指针
} Base;
// 定义子类A
typedef struct DerivedA {
Base base; // 继承基类
int a;
} DerivedA;
// 定义子类B
typedef struct DerivedB {
Base base; // 继承基类
int b;
} DerivedB;
// 实现子类A的方法
void derivedAFunc(Base* base) {
DerivedA* derivedA = (DerivedA*)base;
printf("DerivedA specific action, value of a: %d\n", derivedA->a);
}
// 实现子类B的方法
void derivedBFunc(Base* base) {
DerivedB* derivedB = (DerivedB*)base;
printf("DerivedB specific action, value of b: %d\n", derivedB->b);
}
int main() {
DerivedA derivedA = {{derivedAFunc}, 10}; // 初始化子类A
DerivedB derivedB = {{derivedBFunc}, 20}; // 初始化子类B
// 通过基类指针调用子类的具体方法,实现多态
Base* basePtrA = &derivedA.base;
Base* basePtrB = &derivedB.base;
basePtrA->func(basePtrA); // 输出: DerivedA specific action, value of a: 10
basePtrB->func(basePtrB); // 输出: DerivedB specific action, value of b: 20
return 0;
}
```
在这个示例中,我们创建了两个不同的结构体`DerivedA`和`DerivedB`,它们都包含了一个`Base`类型的成员`base`,并且都实现了自己的功能函数`derivedAFunc`和`derivedBFunc`。通过基类指针调用子类的方法,实现了类似于多态的效果。