Symbian 逐步深入
2010-03-26 04:24:00 来源:WEB开发网TmyCls
TmyCls
//类似这种情况,会生成2个类模板的副本,虽然不会带来效率的降低,但是编译后代码的尺寸则增大。对于做手机开发是很致命的!这就是瘦模板存在的意义!
我们可以考虑用这种方式实现:
Class TmyCls
{
protected:
IMPORT_C TAny* Fun1(TInt aParam);
}
然后
{
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
更多精彩
赞助商链接