c++的多态:
代码如下:
#include<iostream>
using namespace std;
class A
{
virtual void fun()
{
cout << "A:fun()" << endl;
}
int a;
};
class B :public A
{
virtual void fun()
{
cout << "B:fun()" << endl;
}
int b;
};
void test1()//测试代码
{
A _a;
B _b;
A* p = &_a;
p->fun();
p = &_b;
p->fun();
}
int main()//主函数
{
test1();
system("pause");
return 0;
}
c语言模拟实现的多态:
代码如下:
typedef void(*FUN)();//函数指针
struct _A//父类
{
FUN _fun;//由于C语言中结构体不能包含函数,故只能用函数指针在外面实现父类的对象调用父类的同名函数
int _a;
};
struct _B//子类
{
_A _a_;//在子类中定义一个基类的对象即可实现对父类的继承
int _b;
};
void _fA()
{
printf("_A:_fun()\n");
}
void _fB()
{
printf("_B:_fun()\n");
}
void test2()
{
_A _a1;//父类创建_a1对象
_B _b1;//子类创建_b1对象
_a1._fun = _fA;//父类的对象调用父类的同名函数
_b1._a_._fun = _fB;//子类的对象调用子类的同名函数
_A* p2 = &_a1;//定义一个父类指针指向父类的对象
p2->_fun();//调用父类的同名函数
p2 = (_A*)&_b1;//让父类指针指向子类的对象,由于类型不匹配所以要进行强转
p2->_fun();//调用子类的同名函数
}
int main()
{
test2();
system("pause");
return 0;
}