分享
 
 
 

我翻译的文档----Symbian基本规范:类类型

王朝other·作者佚名  2006-02-01
窄屏简体版  字體: |||超大  

译自Developer Library » Symbian OS Guide » Essential idioms » Class types

概要

Symbian OS上的应用程序使用4种常用的类,它们是:

l 以T开头的值类,这种类不拥有任何外部对象,只是通过指针直接引用或通过句柄间接引用外部对象。

l 以C开头的基于堆分配的类,这种类全部是从CBase派生过来的。

l 以R开头的资源类,R类对象包含其它位置拥有资源的句柄。

l 以M开头的接口类,这种类定义了接口但需要派生类实现。

这些类与清除机制的需求相关,具体细节请参考SDK(Developer Library » Symbian OS Guide » C++ API guide » Base » Memory Management » Using Cleanup Support » Cleanup Stack Basics » Cleanup requirements)。

值类型:T类

最基本的类是值类型,它们的名字以T开头。

T类包含有它们的值,但这它们不拥有任何外部对象,只是通过指针直接引用或通过句柄间接引用外部对象。

T类可以在栈上分配(C++自动变量),也可以是其它类的成员。

T类的基本特征将在下面讲述。

构造函数:

许多T类非常简单以至于根本不需要构造函数,那些包含有构造函数的,是通过构造函数初始化成员数据。

拷贝构造函数和赋值运算符:

拷贝构造函数(TX(const TX&))和赋值操作符(TX& operator=(const TX&))很少需要,这是因为拷贝是浅拷贝,T类几乎都是按成员进行拷贝。C++编译器会产生缺省的拷贝构造函数和赋值操作符。

当T类是有一个整数参数的模板类时会需要这两个函数,这种情况下,拷贝或赋值TX<32>到TX<40> 比按位拷贝要复杂一些,因此需要明确实现拷贝构造函数和赋值操作符。

析构函数:

T类不需要析构函数,因为当T类生命周期结束后没有需要清除的外部资源。

消毁

T类可以安全的在栈上消毁,消毁意味着不用通过析构函数就可以释放内存。因为T类自己不拥有外部资源,所以当T类对象被消毁时不会有外部资源变的不可访问。

函数参数

做为函数参数时T类可以通过值和引用进行传递。

数据成员

T类可以包含其它T类对象,另外,可以包含R类对象或C类对象的指针,包含的这些对象是通过另一个类或函数进行清除的,在实践中,很少用这种方法。

标准类层次:C类和CBase类

使用最多的类除了T类还有C类,C类是直接或间接从CBase类派生出来的。

从CBase派生的类有下面的特性:

l 它们总是在堆上而不是栈上创建,并且不做为其它类的成员。

l 分配程序会把类层次中的成员数据初按二进制0初始化。

l 它们通过指针或引用传递,并且不需要拷贝构造函数和重载赋值运算符,除非确定某个类确实需要支持拷贝操作。

l 它们不用通常的构造方法,因为在通常的构造过程中可能会有leave发生,习惯上通过一个二阶段构造(two-phase construction)来实现,C++中的构造函数只负责那些不会产生leave的构造,然后在一个名为ConstructL()的函数中处理那些可能会产生leave的构造。

l 它们有一个虚析构函数,它被用来进行标准的清除过程。

l 因为有一个虚析构函数,C类对象可以很简单的使用清除(cleanup stack)进行清除;另外,因为C类对象是在堆(heap)上分配的,当有leave发生时,它们必需要被清除:这要求在处理所有C类对象时必须要有清除的意识。

C类的具体要求请查看SDK文档(Developer Library » Symbian OS Guide » C++ API guide » Base » Memory Management » Using Cleanup Support » Two Phase Construction)。

资源类型:R类

R 类是其它地方对象的代理,这样做有两个主要的动机:

l 直正的对象是一个server拥有的,在不同的线程或地址空间。

l 真正的对象对client来说必须是隐藏的。

下面是R类对象的关键特征:

l 它们含有一个用来传递请求到另一个对象的句柄。

l R类通常用名为“open”的函数打开,用名为“close”的函数关闭。一个R类对象打开后必须被关闭。通常如果打开资源的线程关闭后与R类对象关联的资源被自动关闭。

l 它们可以直接按位拷贝。

l 它们没有构造函数,析构函数,拷贝构造函数或重载赋值运算符。

R类使用许多协议来处理这些需求:

l R类间的句柄特征可能是不同的。

l R类没有共用基类。

l 初始化函数可能有许多名字:可能是Open(), Create(), Allocate()等等。

l 终止函数可能有许多名字:可能是Close(), Destroy(), Free()等等。

l 因为R类拥有外部对象,在清除时就有一些要求:这些要求根据不同的类有不同的处理方法。

接口类型:M类

M类定义抽象协议或接口,具体的实现由派生类提供。

M类有下面的限制:

l 它们不可以有数据成员。

l 它们不可以有构造函数、析构函数,或者重载的操作符,比如‘=’。

M类常常包含定义完全抽象接口的纯虚函数。一些M类在上面的限制内实现一些或全部的成员函数。

M类是Symbian OS中唯一使用多重继承的方法。更多细节请查看SDK文档(» Developer Library » Symbian OS Guide » Essential idioms » Multiple inheritance and interfaces)。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有