在前面博客已經詳細講過C++中繼承與多態的概念,在這裏則只使用C語言的語法來實現繼承與多態。
繼承:
即派生類中擁有基類的成員變量和成員函數,所以C語言實現如下:
#include <stdio.h>
typedef void(*Func)(void);
void funB()
{
printf("B::funB()\n");
}
typedef struct B
{
int _b;
Func _fb;
}B;
typedef struct D
{
B b;
int _d;
}D;
void test()
{
D d;
d.b._fb=funB;
d.b._b=1;
d._d=2;
D* pd=&d;
printf("%d\n",d.b._b);
pd->b._fb();
printf("%d\n",d._d);
}
運行結果如下:
所以在以上實現中用兩個結構體實現,其中一個包括另一個的對象,則就相當於它繼承了另一個的成員,C語言中結構體無成員函數,則用函數指針來代替。
多態:
1.派生類重寫了基類的虛函數;
2.基類的指針或引用指向派生類的對象時,調用派生類重寫的虛函數;
實現如下:
//C語言實現多態
#include <stdio.h>
typedef void(*Func)(void);
void funB()
{
printf("B::funB()\n");
}
void funD()
{
printf("D::funD()\n");
}
typedef struct B
{
int _b;
Func _fb;
}B;
typedef struct D
{
B b;
int _d;
}D;
void test()
{
B b1;
D d1;
b1._fb=funB;
d1.b._fb=funD;
B* pb=&b1;
pb->_fb();
pb=(B*)&d1;
pb->_fb();
}