用C语言实现c++的封装、继承、多态
来源:互联网 发布:知更 杨千嬅 编辑:程序博客网 时间:2024/06/05 18:49
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;}
0 0
- 用C语言实现c++的封装、继承、多态
- C语言实现封装,继承
- C语言实现C++的封装继承和多态
- C语言是怎样实现封装、继承、多态的?
- C语言实现C++的封装继承与多态
- 面向对象之继承,封装,多态c语言实现
- 如何用C语言实现C++的基本特性:封装、继承、多态
- 用c语言实现面向对象的封装继承和多态
- C语言设计模式-封装-继承-多态
- 用 C 语言实现 C++ 的 继承 和 多态
- C语言实现封装
- C语言实现封装
- C语言实现封装、继承和多态
- C语言实现封装、继承和多态
- C语言实现封装、继承和多态
- C语言实现封装、继承和多态
- C语言实现封装、继承和多态
- c语言实现封装,继承和多态
- scrapy几大神坑
- L1-027. 出租
- iOS集成友盟第三方分享
- ionic-侧边菜单$ionicSideMenuDelegate
- Java的强、软、弱、虚四种应用
- 用C语言实现c++的封装、继承、多态
- Nexus配置步骤
- 170510 JavaScript-返回值、Bug修复
- 【Android入门】02 Android Studio
- Java实现简单版SVM
- 安装完CentOS 7 后必做的七件事
- 删数问题(贪心)
- iOS把真机文件导出
- struts2用标签获得list的长度