c语言下的封装继承与多态

c语言下的封装继承与多态

ID:8967748

大小:66.76 KB

页数:10页

时间:2018-04-13

c语言下的封装继承与多态_第1页
c语言下的封装继承与多态_第2页
c语言下的封装继承与多态_第3页
c语言下的封装继承与多态_第4页
c语言下的封装继承与多态_第5页
资源描述:

《c语言下的封装继承与多态》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、C语言下的封装、继承与多态上次课,钱SIR提到,Liux下面也有很多用C实现的面向对象的结构。比较感觉兴趣,就在网上查了一些资料,原来C语言模拟实现面向对象语言所具有的特性:多态,继承,封装,也是一件很简单的事儿。并且现在很多开源软件都了用C语言实现了这几个特性,包括大型开源数据库系统postgreSQL,可移植的C语言面向对象框架GObject。在自己机器上实践了下,感叹C语言的灵活与强大!总结一下,以便交流:一、基础知识(1)结构体结构体可以嵌套,因而可以把一个结构体当成另一个结构体的成员,如:[cpp]viewplaincopypr

2、int?1.structPoint{2.intx;3.inty;4.};[cpp]viewplaincopyprint?1.structCircle{2.structPointpoint_;3.intradius;4.};该结构体与以下定义完全一样(包括内存布置都一样[cpp]viewplaincopyprint?1.structCircle{2.intx;3.inty;4.intradius;5.};(2)void*指针是整个C语言的精髓所在。而你也一直敬畏着指针,又爱又恨地使用着它。许多教材都告诉你,int*叫做指向整型的指针,而ch

3、ar*是指向字符型的指针,等等等等不一而足。然而这里有一个另类的指针家族成员——void*。不要按照通常的命名方式叫它做指向void类型的指针,它的正式的名字叫做:可以指向任意类型的指针。(3)C中的参数个数可变函数可变参数函数的原型声明:[cpp]viewplaincopyprint?1.typeVAFunction(typearg1,typearg2,…);参数可以分为两部分:个数确定的固定参数和个数可变的可选参数。函数至少需要一个固定参数,固定参数的声明和普通函数一样;可选参数由于个数不确定,声明时用"..."表示。固定参数和可选参

4、数公同构成一个函数的参数列表。标准C/C++包含头文件stdarg.h,该头文件中定义了操作不定变量的相关宏:[cpp]viewplaincopyprint?1.voidva_start(va_listarg_ptr,prev_param);/*ANSIversion*/2.typeva_arg(va_listarg_ptr,type);3.voidva_end(va_listarg_ptr);在这些宏中,va就是variableargument(可变参数)的意思;arg_ptr是指向可变参数表的指针;prev_param指可变参数表的前

5、一个固定参数;type为可变参数的类型。va_list也是一个宏,其定义为typedefchar*va_list,实质上是一char型指针。具体用法可以参考:http://blog.chinaunix.net/space.php?uid=9174178&do=blog&cuid=484548二、封装封装的主要含义是隐藏内部的行为和信息,使用者只用看到对外提供的接口和公开的信息。在C语言中的实现方法:把私有数据信息放在一个不透明的priv变量或者结构体中,只有类的实现代码才知道priv或者结构体的真正定义。例如:头文件:[cpp]viewp

6、laincopyprint?1.//========头文件:Point.h文件========2.#ifndefPOINT_H3.#definePOINT_H4.typedefstructPointpoint;5.typedefstructpointPrivatepointPrivate;1.structPoint2.3.{4.structpointPrivate*pp;};5.intget_x(point*point_);6.intget_y(point*point_);7.poin

7、t*new_point(intx,inty);8.}9.#endif源文件[cpp]viewplaincopyprint?1.//=======C文件:Point.c文件========2.#include"Point.h"3.#include4.structpointPrivate;5.intx;6.inty;7.};8.9.intget_x(point*point_){10.returnpoint_->pp->x;11.}12.13.intget_y(point*point_){14.returnpoint_->p

8、p->y;15.}16.17.point*new_point(intx,inty){18.point*p=(point*)malloc(sizeof(point));19.p->pp=(poi

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。