用c语言实现继承和多态

来源:互联网 发布:淘宝客户运营平台在哪 编辑:程序博客网 时间:2024/06/05 20:35

继承和多态是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();   //调用子类的虚函数}




原创粉丝点击