1 / 9
文档名称:

强制转型.pdf

格式:pdf   大小:360KB   页数:9页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

强制转型.pdf

上传人:国霞穿越 2022/5/19 文件大小:360 KB

下载得到文件列表

强制转型.pdf

相关文档

文档介绍

文档介绍:dynamic_cast
运算符 dynamic_cast 可以针对两种数据类型做强制转换:指针类型和引用类型。这两种类
型的情况是不一样的。下面讨论如下:
1、对指针的强制转换
dynamic_cast<T*
{
virtual void f(void) { }
};
class Base2 { };
class Derived : public Base1, public Base2 { };
int main(void) {
try {
Derived d, *pd;
Base1 *b1 = &d;
if ((pd = dynamic_cast<Derived *>(b1)) != 0) {
std::cout << "The resulting pointer is of type "
<< typeid(pd).name() << std::endl;
}
else throw Bad_cast();
Base2 *b2;
if ((b2 = dynamic_cast<Base2 *>(b1)) != 0) {
cout << "The resulting pointer is of type "
<< typeid(b2).name() << endl;
}
else throw Bad_cast();
}
catch (Bad_cast) {
cout << "dynamic_cast failed" << endl;
return 1;
}catch (...) {
cout << "Exception handling error." << endl;
return 1;
}
return 0;
}
下面是一个实际应用的例子,在创建数据模块时,打开数据模块上面所有的数据
集。其原理是:遍历数据模块的所有 VCL 控件,如果可以动态转换成数据集类型
(TDataSet),则调用 TDataSet 的 Open()方法打开它。
//-------------------------------------------------------------------
--------
void __fastcall TDM::DataModuleCreate(TObject *Sender)
{
int i;
TDataSet *p;
for(i=0;i<ComponentCount;i++)
if(p=dynamic_cast<TDataSet *>(Components[i]))
p->Open();
}
//-----------------------------------