在C語(yǔ)言中,實(shí)現(xiàn)多態(tài)的方法通常是通過(guò)函數(shù)指針和結(jié)構(gòu)體來(lái)實(shí)現(xiàn)。通過(guò)定義一個(gè)包含函數(shù)指針的結(jié)構(gòu)體,并且在不同的子類中實(shí)現(xiàn)相同的函數(shù)指針,就可以實(shí)現(xiàn)多態(tài)性。
具體實(shí)現(xiàn)步驟如下:
示例代碼如下所示:
#include <stdio.h>
// 基類結(jié)構(gòu)體
typedef struct {
void (*func)(void);
} BaseClass;
// 子類1結(jié)構(gòu)體
typedef struct {
BaseClass base;
} SubClass1;
void func1() {
printf("This is func1.\n");
}
// 子類2結(jié)構(gòu)體
typedef struct {
BaseClass base;
} SubClass2;
void func2() {
printf("This is func2.\n");
}
int main() {
SubClass1 sub1;
SubClass2 sub2;
// 初始化子類1
sub1.base.func = func1;
// 初始化子類2
sub2.base.func = func2;
// 多態(tài)調(diào)用
BaseClass* ptr1 = (BaseClass*)&sub1;
ptr1->func();
BaseClass* ptr2 = (BaseClass*)&sub2;
ptr2->func();
return 0;
}
以上代碼通過(guò)定義基類結(jié)構(gòu)體BaseClass和兩個(gè)子類結(jié)構(gòu)體SubClass1和SubClass2實(shí)現(xiàn)多態(tài)性。函數(shù)指針func作為虛函數(shù),分別在子類中實(shí)現(xiàn)具體的函數(shù)邏輯。在main函數(shù)中,通過(guò)基類指針調(diào)用虛函數(shù),實(shí)現(xiàn)了多態(tài)的效果。