//C++中的继承与多态 struct A { virtual void fun() //C++中的多态:通过虚函数实现 { cout << "A:fun()" << endl; } int a; }; struct B :public A //C++中的继承:B类公有继承A类 { virtual void fun() //C++中的多态:通过虚函数实现(子类的关键字virtual可加可不加) { cout << "B:fun()" << endl; } int b; }; //C语言模拟C++的继承与多态 typedef void(*FUN)(); //定义一个函数指针来实现对成员函数的继承,fun是一个函数指针,返回值为void,没有形参 struct Baba //父类 { FUN fun; //由于C语言中结构体不能包含函数,故只能用函数指针在外面实现 int bb; }; struct Erzi //子类 { Baba myfather; //在子类中定义一个父类的对象即可实现对父类的继承 int ee; }; void fun_Baba() //父类的同名函数 { printf("Baba: fun() "); } void fun_Erzi() //子类的同名函数 { printf("Erzi: fun() "); } int main() { //测试C++中的继承与多态 A a; //定义一个父类对象a B b; //定义一个子类对象b A* p1 = &a; //定义一个父类指针指向父类的对象 p1->fun(); //调用父类的同名函数 p1 = &b; //让父类指针指向子类的对象 p1->fun(); //调用子类的同名函数 cout << endl; //C语言模拟继承与多态的测试 Baba baba; //定义一个父类对象_a Erzi erzi; //定义一个子类对象_b baba.fun = fun_Baba; //父类的对象绑定父类的同名函数,对函数指针赋值可以不用&,也可以用 erzi.myfather.fun = fun_Erzi; //子类的对象绑定子类的同名函数 Baba* p2 = &baba; //定义一个父类指针指向父类的对象 p2->fun(); //调用父类的同名函数 p2 = (Baba*)&erzi; //让父类指针指向子类的对象,由于类型不匹配所以要进行强转 p2->fun(); //调用子类的同名函数 return 0; }