Programming 版 (精华区)
发信人: zhangyan (从来就没有什么救世猪!), 信区: SoftEng
标 题: OO in C - Encap
发信站: 哈工大紫丁香 (2001年03月27日17:45:36 星期二), 站内信件
1.封装性:
----------------------------------------------------------------------------
---
通过使每个类属性(instance variable)为C结构的一个域,在C中你可以包装数据和函数
.
实现类方法为C函数,其第一个参数为指向属性结构的指针(this指针).通过对方法名采用
一致
的命名规则,可进一步加强属性和方法之间的联合.最常用的规则为合并结构名(类名)和
操作
名.函数名的改变是名字修饰的一部分(也称作名字损坏[mangling]),大多数C++编译器隐
含
执行函数名的改变.因为名称修饰消除了不同类之间的方法名冲突, 所以它有效地将平面
的
[flat]C函数名字空间划分为独立的,嵌套在类中的名字空间.
编码规则可解决的另一问题是访问控制. 在C中,你只能显式说明属性和方法允许访
问的
级别.通过名称可比声明时注释更好地表达该意图.这样可更容易地发现代码中对类成员
的
非法访问.大部分OO设计区分如下的3级保护:
*pivate--只能从类内部访问;
*protected--只能由类及其子类访问;
*public--随处可用(C中缺省);
pivate属性使用双下划线(__foo).注意没有必要在类声明文件(.H文件)中暴露私有方法
;
你应该将它们完成隐藏在实现文件中(在.C文件中声明它们为static).protected成员使
用单
下划线(_foo, String_Foo).public成员不使用下划线(foo, StringFoo).这样,名称中出
现
下划线时,应检查访问权限.
每个类需提供至少一个constructor方法,用于初始化它的属性结构. Constructor调
用
应该是初始化的唯一方法.否则,必须暴露对象的内部结构,而损坏包装性.
类可选提供destructor方法,负责释放对象生命期间分配的资源.尽管有多种方法实例化
[instantating]类(接受不同参数的不同constructors), 却只有一种方法消灭对象.
因为constructors&destructors的特殊角色,建议使用一致的命名模式.使用基名"Con"
(FooCon1, FooCon2)和"Des"(FooDes). 建议constructor返回初始化属性结构的指针或
NULL.destructor只接受一个参数this,应返回void.
对象分配可静态,动态(在堆中),自动(在栈中).由于C语法市委限制, 你不能在定义
点用
constructor call初始化对象.对于静态对象,根本不能调用constructor,因为in a sta
tic
initializer不允许函数调用.自动对象必须都在block的开始定义,而此时一般没有足够
的
初始化信息.因此,不得不将对象分配和初始化分离.你应将对象当做一般的C变量,初始化
后
使用.一般当初始化信息可用时,立即初始化对象.
某些对象可能需要析构, 当对象过时或超出作用域时,为每个对象都调用destructo
r是
种好的编程习惯.后面将看到一个对所有类都可用的virtual destructor.
--
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.170.172]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.635毫秒