static_cast在ATL中很常见.它是实现模版形式多态的关键.
来源:互联网 发布:python datetime 转秒 编辑:程序博客网 时间:2024/05/18 20:46
static_cast在ATL中很常见.它是实现模版形式多态的关键.
比如:
template <class T>
class CTest:public T
{
....
void SomeMethod()
{
T *pT = static_cast <T*> (this);
pT-> BaseMethod();
}
};
初看很迷惑,既然CTest继承自T,直接调用T中BaseMethod()不就行了.为什么作 "T *pT = static_cast <T*> (this); "这样的转换?
其实,这正是模版方式实现多态的关键.
先看看类的实现:
class CBase
{
public:
CBase(){};
~CBase(){};
void BaseMethod()
{
cout < < "BaseMethod in Base " < < endl;
}
};
class CMath: public CBase
{
public:
CMath(){};
~CMath(){};
void BaseMethod()
{
cout < < "BaseMethod in Math " < < endl;
}
};
CBase和CMath都实现了BaseMethod().
CTest <CBase> *pTest = new CTest <CBase> ;
pTest-> BaseMethod(); ----> 调用CBase的BaseMethod();
CTest <CMath> *pTest = new CTest <CMath> ;
pTest-> BaseMethod(); ----> 调用CMath的BaseMethod();
由此可见,利用模版技术实现多态,就需要通过类似
template <class T>
class CTest:public T
{
...
}
这样的模版类.
这种类起初看起来怪怪的,但很关键.
比如:
template <class T>
class CTest:public T
{
....
void SomeMethod()
{
T *pT = static_cast <T*> (this);
pT-> BaseMethod();
}
};
初看很迷惑,既然CTest继承自T,直接调用T中BaseMethod()不就行了.为什么作 "T *pT = static_cast <T*> (this); "这样的转换?
其实,这正是模版方式实现多态的关键.
先看看类的实现:
class CBase
{
public:
CBase(){};
~CBase(){};
void BaseMethod()
{
cout < < "BaseMethod in Base " < < endl;
}
};
class CMath: public CBase
{
public:
CMath(){};
~CMath(){};
void BaseMethod()
{
cout < < "BaseMethod in Math " < < endl;
}
};
CBase和CMath都实现了BaseMethod().
CTest <CBase> *pTest = new CTest <CBase> ;
pTest-> BaseMethod(); ----> 调用CBase的BaseMethod();
CTest <CMath> *pTest = new CTest <CMath> ;
pTest-> BaseMethod(); ----> 调用CMath的BaseMethod();
由此可见,利用模版技术实现多态,就需要通过类似
template <class T>
class CTest:public T
{
...
}
这样的模版类.
这种类起初看起来怪怪的,但很关键.
- static_cast在ATL中很常见.它是实现模版形式多态的关键.
- ATL实现中,模版技术的使用
- 【题目】static_cast在ATL当中的应用
- 在ATL中实现窗口
- 在ATL中实现窗口
- 在ATL中实现窗口
- atl中常见的模板使用手法
- atl中常见的模板使用手法
- 在ATL中实现窗口(精)
- 什么是码率控制? 在视频编码中,码率控制的概念是什么,它是通过什么实现的?
- 在D3D中实现纹理的关键色透明
- 在ATL DLL中实现在窗口中使用CDockablePane
- 美语中常见的缩写形式
- 在ATL中,类厂是计数的
- ATL中实现全屏切换的方法
- 十进制数转二进制形式并判断它是否为2的n次幂(Java实现)
- 在 VC++ 6.0 中使用 ATL 实现对 COM 对像的事件处理
- 用ATL实现在COM接口中返回另一个COM类的接口
- Spring下Mysql的乱码问题
- DataGrid 添加 RadioButton
- CnineGrid 类
- 论J2EE程序员的武功修为
- 全面介绍Windows内存管理机制及C++内存分配实例(一):进程空间
- static_cast在ATL中很常见.它是实现模版形式多态的关键.
- CComCreator代替new来创建组建实例
- CAtlModule类的实现
- 怎样删除*.sys文件
- 经典的C++库
- javascript:如何获得鼠标在屏幕上的位置
- SAP Java Connector(JCo) (转)
- 利用反射动态调用类成员
- 全面介绍Windows内存管理机制及C++内存分配实例(二):内存状态查询