WEB开发网
开发学院手机开发Symbian 开发 Symbian 逐步深入 阅读

Symbian 逐步深入

 2010-03-26 04:24:00 来源:WEB开发网   
核心提示:TmyCls TintMyCls;TmyCls TUintMyCls;//类似这种情况,会生成2个类模板的副本,Symbian 逐步深入(3),虽然不会带来效率的降低,但是编译后代码的尺寸则增大,它只是用来实现其他的类,所以 TmyCls cls; //这是错误的,对于做手机开发是很致命的!这就是瘦模板存在的意义!我们

TmyCls TintMyCls;

TmyCls TUintMyCls;

//类似这种情况,会生成2个类模板的副本,虽然不会带来效率的降低,但是编译后代码的尺寸则增大。对于做手机开发是很致命的!这就是瘦模板存在的意义!

我们可以考虑用这种方式实现:

Class TmyCls

{

protected:

IMPORT_C TAny* Fun1(TInt aParam);

}

然后

class TSubMyCls:private TmyCls

{

Inline T& DoFun1(TInt aParam)

{

Return *((T*)Fun1(aParam));//返回的是地址

}

}

虽然在TSubMyCls中也会产生两个副本,但是由于函数的实现是在TmyCls当中。所以其内存分配较小,不会造成浪费。

另外,为什么要私有继承呢?A类私有继承B类,则B类中的protected方法、public方法在A类中都将变成private。是因为实际中TAny* 不是类型安全的,而如果通过公有继承,那么子类是可以转化成父类(编译器允许)。因为公有继承本身就有”是一个”的概念。但是如果通过私有继承,只是表达这样一种关系:”用...来实现”,这里的意思是:TSubMyCls可以用TMyCls的某些方法来实现。TSubMyCls只关系父类的实现的方法,和对象层次没有任何关系。

私有继承一旦使用,等于再告诉所有人:父类的使用是不安全的,它只是用来实现其他的类。所以 TmyCls cls; //这是错误的,因为一般构造函数是protected类型。

看如下的代码:(C++代码)

/////Stack

class GenerateStack

{

protected:

GenerateStack();

~GenerateStack();

protected:

void Push(void* psObj);

void* Pop();

bool Empty() const;

};

//注意 这里使用 GenerateStack gs; //error

//int 类型的Stack

class IntStack:private GenerateStack

{

public:

inline void Push(int* intObj)

{

GenerateStack::push(intObj);

}

inline int* Pop()

{

return static_cast(GenerateStack::Pop());

上一页  1 2 3 4 5 6 7 8  下一页

Tags:Symbian 逐步 深入

编辑录入:coldstar [复制链接] [打 印]
赞助商链接