用C语言实现c++的封装、继承、多态
2017-05-10 21:29
806 查看
c++的三大特性:封装、继承、多态
如何用C语言实现呢?
1、封装
在c++中,将数据与数据的操作封装在一起,也就是类
类只对外界开放接口,将接口的实现细节与类的一些属性,变量隐藏起来,达到数据的抽象性,隐藏性与封装性。
在C语言中,有一个类似于封装的类型——struct结构体(能够将多种数据类型封装在一起),那怎么实现将数据的操作一起封装起来呢?
我们想到了函数指针
2、继承
在c++中,用一个类去继承另一个类,会得到其基类的相关属性与方法
在C语言中,我们可以使用组合的方法,在新有类中定义已有类的对象,就可以在新类中通过已有类的对象访问已有类自己的成员变量与函数。
与继承的区别:
1、继承是属于的关系,而组合是包含的关系
2、继承是复用原有类,可以通过派生类访问基类,而组合仅仅是组合在一起,只能通过已有类的对象访问自己的成员变量与函数
3、多态
在c++中,多态是通过父类的指针或引用去调用一个在父类中存在的virtual 类型函数<虚函数>,实现动态绑定,我们知道,要想使用父类的指针或引用调用子类的函数,在父类中,必须将其声明为虚函数、并且与子类中的函数参数列表,返回值,函数名相同
C语言实现多态思路:
c++中的多态是通过函数覆盖实现的,在C语言中;
如何用C语言实现呢?
1、封装
在c++中,将数据与数据的操作封装在一起,也就是类
类只对外界开放接口,将接口的实现细节与类的一些属性,变量隐藏起来,达到数据的抽象性,隐藏性与封装性。
在C语言中,有一个类似于封装的类型——struct结构体(能够将多种数据类型封装在一起),那怎么实现将数据的操作一起封装起来呢?
我们想到了函数指针
//函数指针 void (*pf)(int) 名为pf,指向一个返回值为空,形参列表为int的函数指针
#include <stdio.h> typedef struct Astruct { int _a; //成员变量 void(*pf1)(); //成员函数指针 int (*pf2)(); }*Astr; int print1() { return 0; } int print2() { return 1; } void initastr(Astr str,int a) { str->_a = a; str->pf1 = print1; str->pf2 = print2; printf("%d\n", *(str->pf1)); printf("%d\n", *(str->pf2)); } int main() { Astr aa = (Astr) malloc(sizeof(int)*4); initastr( aa, 3); printf("%d\n", aa->_a); return 0; }
2、继承
在c++中,用一个类去继承另一个类,会得到其基类的相关属性与方法
class A //基类 { public: int a; }; class B :public A //共有继承A 含有基类的属性 { int b; };
在C语言中,我们可以使用组合的方法,在新有类中定义已有类的对象,就可以在新类中通过已有类的对象访问已有类自己的成员变量与函数。
与继承的区别:
1、继承是属于的关系,而组合是包含的关系
2、继承是复用原有类,可以通过派生类访问基类,而组合仅仅是组合在一起,只能通过已有类的对象访问自己的成员变量与函数
typedef struct A { int _a; }A; typedef struct B { A a; int _b; }B;
3、多态
在c++中,多态是通过父类的指针或引用去调用一个在父类中存在的virtual 类型函数<虚函数>,实现动态绑定,我们知道,要想使用父类的指针或引用调用子类的函数,在父类中,必须将其声明为虚函数、并且与子类中的函数参数列表,返回值,函数名相同
C语言实现多态思路:
c++中的多态是通过函数覆盖实现的,在C语言中;
struct A { int _a; void(*print) (void *p);//函数指针 }; struct B { struct A Pa; //包含一个A类的对象 Pa }; void printpa(void * p) { if (p == NULL) return; printf("call A\n"); } void printpb(void * p) { if (p == NULL) return; printf("call B\n"); } void print_F(void* p) { if (p == NULL) return; struct A* pa = (struct A*)p; pa->print(p); } int main() { struct A a; struct B b; a.print = printpa; //A 中的函数指针指向函数 b.Pa.print = printpb;//B通过A的对象的函数指针指向的函数 print_F(&a); print_F(&b); return 0; }
相关文章推荐
- C语言实现C++的封装继承和多态
- 【转】C语言实现C++面向对象的封装、继承、多态机制
- C语言实现C++的封装继承与多态
- 如何用C语言实现C++的基本特性:封装、继承、多态
- C++封装继承多态 及内部实现原理详解
- c语言实现封装,继承和多态
- C语言模式实现C++继承和多态
- C语言模式实现C++继承和多态
- C语言如何模拟C++实现继承和多态
- C语言实现封装、继承和多态
- C语言实现封装、继承和多态
- C++的三大特性:封装、继承、多态,以及多态的具体实现
- c语言模拟实现c++继承和多态
- C语言实现封装、继承和多态
- C语言实现封装、继承和多态
- C语言模拟实现C++中的继承和多态
- C语言实现封装、继承和多态
- C语言模拟实现C++的继承与多态
- C语言实现封装、继承和多态
- C语言也可以“面向对象”—— C语言实现封装、继承和多态