C++的三大特性:封装、继承、多态,这些是C语言没有的,C++用class类实现了这三个特性,而C语言只有struct结构体,那么,如何用C语言模拟实现C++的继承和多态呢?
我们先要清楚继承和多态的概念。
继承:允许派生类在基类原有特性的基础上扩展,增加派生类特有成员。
多态:通过虚函数指针指向虚表中不同类中的同名函数。
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
typedef void(*Fun) ();//C语言结构体中不能包含成员函数,所以在结构体外定义函数指针
struct AA
{
Fun _fun;
int _a;
};
struct BB
{
AA a;//定义AA结构体对象实现继承
int _b;
};
void funA()
{
printf("funA()\n");
}
void funB()
{
printf("funB()\n");
}
int main()
{
AA aa;
BB bb;
aa._fun = funA;
bb.a._fun = funB;
AA *p = &aa;//定义AA的对象指针
p->_fun();
p = (AA*)&bb;//父类指针指向子类对象
p->_fun();//实现多态
system("pause");
return 0;
}