C语言面向对象的实现---封装性
来源:互联网 发布:注册域名需要哪些手续 编辑:程序博客网 时间:2024/05/16 07:41
在嵌入式系统开发中,不同的硬件一般都支持C编译器,而可能没有C++的编译器或支持的不好,所以,在嵌入式系统的开发中,C语言是使用最多的语言。而为了使用面向对象(OO)的优点,一般在C编程中加入OO的特性。
面向对象编程(OOP)有三个特性:封装、继承和多态性。Smalltalk、C++、Java、C#等面向对象语言在语言层次上支持OOP,而OOP并不是为特殊语言而使用的,用C和汇编也可以实现OOP的思想。
以下用C实现了OOP的三个特性之一:封装性,也即访问权限。
1. public访问权限(全局权限)---全局可见
关键:只要包含头,该头中声明的成员(属性、方法和宏)就是全局可见的。
如下图,module.h中的声明了v1和f1()成员, A.c中实现了方法f1(), Other.c因为包含了module.h, 所以,在Other.c中,v1和f1()都是可见的。
2.protected访问权限(保护权限)---包内可见,包外继承中也可见
只在继承中可以使用的成员,在C中很难实现这种权限。一般用宏定义为public的形式,但在使用中要注意,只让这个成员在继承的类实例中使用(关于C的继承性在其它博文中)。
3.friendly访问权限(包内权限)---只在包内可见,包外不可见
概念:包含其它头的头我们叫它父头,如module1_pkg.h;而被包含的头我们叫它子头,如module1.h。
关键:(1)用多级包含的头文件,形成不同的包内包外访问权限,则父头的声明的成员为friendly访问权限。
(2)包内所有定义.c文件时都使用父头,而在包外使用子头,则父头中声明的成员(属性、方法和宏)在包内可见,而包外不同见。
module1目录就是一个包,其中有一个包头文件module1_pkg.h, 和所有.c文件。包头文件module1_pkg.h包含头文件module1.h,在包头module1_pkg.h是声明的成员---也就是friendly成员。
本包中所有.c文件使用包头module1.pkg.h,而其它包中的所有.c实现文件使用module1.h,则module1_pkg.h中声明的成员在module1包内可见,而在module2包中不可见,如图3.1。
也可以把成员定义在一个.c文件中,再用extern引用提升到module1_pkg.h中,则该成员在包含module1_pkg.h的其它.c文件中可见,而在包含module1.h的其它.c文件中不可见,如图3.2。
4. private访问权限(私有权限)---只在本.c文件内可见,其它位置不可见
关键:只在.c文件定义的成员(属性和方法),只能在本.c文件中可见,一般前边加一个static修饰(不加也一样),但为了与用extern修饰而被提升的成员进行区别,所以private成员前加static, 而被提升的成员不加static。
如下图,v2,f2是在A.c中声明和实现的,它们只能A.c中可见,在Other.c中不可见。
关键:extern修饰符并不是声明一个成员(属性和方法),只是个引用,并可以提升成员的访问权限。若采用分层的头结构,可以用extern提升成员为包内可见或全局可见。
一般把逻辑上相关的成员声明放在相近的位置,如放在A.c文件中,当要提升成员的访问权限时,可以在.h头中用extern来提升成员的访问权限。
用extern可以把private成员变成public成员;有时只是说明本文件中会用到某个成员(其它文件中已经声明的)而引用一下。
- C语言面向对象的实现---封装性
- C语言面向对象的实现---封装性
- 面向对象之继承,封装,多态c语言实现
- 用C语言实现面向对象之封装
- C语言实现面向对象的思想(实现封装、继承和多态)
- 用c语言实现面向对象的封装继承和多态
- luajit利用ffi结合C语言实现面向对象的封装库
- C语言面向对象的实现
- C语言面向对象的实现---多态性
- C语言实现面向对象的思想
- Objective-c语言_面向对象(封装)
- Objective-C语言_面向对象(封装)
- C语言面向对象的实现---继承性
- C语言面向对象的实现---继承性
- C语言面向对象的实现---继承性
- C语言也可以“面向对象”—— C语言实现封装、继承和多态
- c语言实现面向对象
- C语言实现面向对象
- Servlet接口
- iPhone 掌握蓝牙通信编程初体验 (百度文库)
- abstract factory
- 家庭智能网络防盗及远程实时监控系统
- apache wicket 框架demo 之 java class
- C语言面向对象的实现---封装性
- iOS网络编程实践--蓝牙对等网络通信实例讲解
- C语言面向对象的实现---继承性
- 一点一点的改变
- HTML5 history API 介绍
- hdu1075What Are You Talking About(Trie tree)
- C语言面向对象的实现---多态性
- PM 如何使自己的观点有说服力,让技术人员觉得你说得有道理,愿意按你说的做
- 嵌入式系统专业 要学的课程