C语言模拟C++的继承与多态

#include <stdio.h>

//C语言模拟C++的继承与多态

typedef void (*FUN)();   //定义一个函数指针来实现对成员函数的继承

struct _A    //父类

{

  FUN _fun;  //由于C语言中结构体不能包含函数,故只能用函数指针在外面实现
  int _a;

};

struct _B     //子类

{

 struct _A _a_;   //在子类中定义一个基类的对象即可实现对父类的继承

  int _b;

};

void _fA()    //父类的同名函数

{

  printf("_A:_fun()\n");

}

void _fB()    //子类的同名函数

{

  printf("_B:_fun()\n");

}

int main()
{
   /* 我的第一个 C 程序 */
   printf("Hello, World! \n");
	
	//C语言模拟继承与多态的测试

  struct _A _a;  //定义一个父类对象_a

  struct _B _b;  //定义一个子类对象_b

  _a._fun = _fA;    //父类的对象调用父类的同名函数

  _b._a_._fun = _fB;  //子类的对象调用子类的同名函数



  struct _A* p2 = &_a;  //定义一个父类指针指向父类的对象

  p2->_fun();   //调用父类的同名函数

  p2 = (struct _A*)&_b; //让父类指针指向子类的对象,由于类型不匹配所以要进行强转

  p2->_fun();   //调用子类的同名函数

   
   return 0;
}

摘自阿秀的学习笔记128

posted @ 2022-10-19 10:32  不入门的菜鸡  阅读(80)  评论(0编辑  收藏  举报