1. Symbian OS中类名约定

来源:互联网 发布:access数据库教材 编辑:程序博客网 时间:2024/06/06 11:59

一.Symbian OS中类名约定

1.1    基本类型

*         TIntXTUIntX(其中X可以是81632)分别代表有符号和无符号

*         TInt64,低于8.0Symbian OS没有对64位整数的内建ARM的支持,所以Tint64是用两个32位整数来实现的;而在Symbian OS8.0上,Tint64就是Long Long类型的TypeDef

*         TReal32TReal64TReal等于TReal64)分别是单精度和双精度,它们分别等价于FloatDouble

*         TText8TText16,分别代表窄字符和宽字符,对应于8位和16位无符号整数。

*         Void*Void有两种含义:

(1)       “指向任何东西的指针”,此时相对于Void*,在Symbian OS中我们应该更优先使用TAny*

(2)       “空无一物”,此时TAny是无法替换的。

基于上述的两种含义,一个具有返回值为Void,参数为一个指向任何东西的指针的函数的声明如下:Void TypicalFunctionTAny* aPointerParameter;

*         TBool用来替换布尔类型,由于历史原因,TBool等价于Int,在使用时应当使用类型替换过的ETrueEFalse。记住,C++任何非零值都将被视为真值,因此,最好避免与ETrue做直接比较。

*         每个TBool32位,这对于使用大量标志变量来表示状态或设置的类来说,是很浪费内存的,此时你也许想使用32位域(bitfield)而不是使用大量的布尔变量。当然你也要考虑到潜在的代码复杂度。

1.2    T

*         T类的行为很象C++的内建类型,和内建类型一样,它们没有析构函数,从而T类也不包含任何具有析构函数的数据成员(比如说不能包含C类的数据成员)

*         T类的数据成员是下面两种数据之一:(1POD(内建类型)和其他T类对象。(2)具有“使用”关系而非“拥有”关系的指针和引用,这些关系表明了对象的所有权,TPtrC描述符类是一个很好的例子。

*         T类一般是创建在栈上,这个时候无论是以正常方式还是以异常方式退出离开函数作用域,T类对象都可以正确地清除(就象Delphi的数组这种类型)。T类也可以创建在堆上,这时T类对象应该先于可能会发生异常退出的调用代码被推入清除栈中,一旦发生异常退出的情况,T类对象的内存可以被清除栈释放,而无需调用析构函数。

*         T类常常不定义缺省的构造函数,当然也有极少情况下,T类需要导出虚函数时,缺省构造函数也要被导出-因为这是所有客户端代码链接的需要。

1.3    C

*         所有具有C字母前缀的类都是从CBase类派生的(e32base.h中定义),CBase有两个特性:(1CBase具有虚析构函数,所以CBase派生类的对象都可以通过对CBase指针的操作而被正确销毁,当使用清除栈,要推入CBase派生类的对象时,调用的是CCleanupStack:PushLCBase* aPtr)重载函数。(2CBase重载New操作符,当对象第一次在堆上构建的时候,该操作符可以将对象置零。这意味着所有CBase派生类对象的数据成员将在它们初次创建的时候被填充为零值。栈上的对象由于不使用New操作符,所以它们不会发生“零初始化”

*         C类的对象必须总是创建在堆上。

1.4    R

*         R类表示资源,通常是外部资源的句柄,例如与文件服务器的会话,由于没有一个类似于CBase作用的基类,一个典型的R类要有一个构造函数来将它的资源句柄置为0,表明当前没有任何资源关联到新建的对象上。不要试图在构造函数中初始化资源句柄,因为这个操作可能失败,永远不要在构造函数中发生异常。

*         要将R类对象与资源关联起来,R类需要有诸如OpenCreateInitialize的函数来分配资源并将句柄成员变量设置好,或操作失败,返回一个错误代码或者发生异常退出。类也需要有对应的Close或者Reset方法,用来释放资源并重置句柄值。

*         R类对象一般很小,通常除了资源句柄以外没有其他数据成员,R类很少有析构函数。一般清除工作在Close中完成了

*         R类可以作为类成员或者作为栈(偶尔也在堆)上的自动变量,但是你必须保证发生异常退出时资源也要释放。典型的做法是使用清除栈

1.5    M

*         M类是抽象接口类。从M类派生的具体类,基本上将一个“决定口味的”类作为第一基类,然后在继承一个或者多个M类的“可混合的”接口,并实现这些函数接口。Symbian OS中,M类往往用来定义回调接口,或者用来定义观察者类

*         多重接口继承是Symbian OS上唯一被提倡的多重继承的形式,其他继承会引入很大程度的复杂性。

*         M类可以看作与Java的接口等价,M类不能有数据成员,因为M类从来都不需要实例化,进而不需要构造函数了。

*         M类需要仔细考虑是否应该有析构函数(是否为虚的),析构函数对可混合类的混合方式做了一定的限制,强制要求其只能由CBase派生类来实现。原因在于,析构函数需要调用Delete,从而要求对象必须是基于堆的,这就意味着实现类必须继承自CBase,因为T类没有析构函数而R类也很少有析构函数。通常需要定义虚析构函数,为了方便销毁指针来持有实现M类的对象

1.6    静态类

*         静态类是只包含静态成员函数的类,这些类本身不能被实例化,这些类不需要名字前缀。它们所提供的函数必须使用域控制符来访问。

 

 

 

原创粉丝点击