用c语言实现继承和多态

继承和多态是C++的特性,它C语言没有这个特性。

C++的三大特性:继承,多态,封装。

继承:分为公有(public)继承,私有(private)继承,保护(protected)继承。

用struct来模拟实现,因为struct在C和C++中都能可以使用,在C中称为结构体在C++中称为类,但他们的原理是一样的,又因为struct的限定符默认是公有的,在C中没有限定符这个概念,所以用C语言只能实现成公有继承。

//实现继承
//子类可以调用父类的成员函数和成员变量
//因为结构体中无函数,故用函数指针来实现
typedef void (*ss)();
struct A
{
	ss s;
	int a;
};
struct B
{
	struct A _a;
	int b;
};
void f1()
{
	printf("father de f1()...\n");
}
void fun1()
{
	struct A _a;
	struct B _b;
	_b._a.a =1;
	_b._a.s =f1; 
	_b.b=2;
	printf("child--->father:%d\n",_b._a.a);
	_b._a .s();   //调用fun函数
}

多态:

//实现多态
//多态--》子类对父类的虚函数进行重写(函数名,参数,返回值都相同,协变除外),
//父类的指针/引用调用重写的虚函数时,当指向父类的对象就是父类的虚函数,
//当指向子类调用的,就是子类的虚函数

typedef void (*Fun)();  //定义了一个Fun类型的函数指针
	//因为C的结构体中不能包含函数,故用函数指针来实现
struct C
{
	Fun fun; //为Fun类型定义一个变量
	int a;
	int b;
};
struct D
{
	struct C c;
};
void PrintfC()
{
	printf("C is father....\n");
}
void PrintfD()
{
	printf("D is child......\n");
}
void fun2()
{
	struct C cc;
	struct D dd;
	struct C* c1;
	cc.fun =PrintfC;  
	dd.c .fun=PrintfD;
	c1=&cc;
	c1->fun();   //调用父类虚函数
	c1=(struct C*)ⅆ
	c1->fun();   //调用子类的虚函数
}




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值