发布时间:2018年04月10日 21:40:24分享人:西瓜将军来源:互联网9
static_cast和dynamic_cast是c++中的rtti的两个操作符。其中static_cast是相当于c的强制类型转换,用起来可能有一点危险。dynamic_cast如果转换成引用出错的话,就会出现异常,这里需要做一个异常处理的机制。转换指针出错返回null。dynamic_cast可以转换指针和和引用(基类到派生类),不能用来转换对象."安全的向下转换",它通过c++的dynamic_cast运算符来实现。当对一个指针使用dynamic_cast时,先尝试转换,如果成功,就返回新类型的合法指针;如果dynamic_cast失败,返回空指针
//运行如下程序#include <iostream>
using namespace std;
class A
{
public:virtual void show()
{
std::cout<<"A::show()"<<endl;
}
};
class B : publicA
{
public: virtual voidshow()
{
std::cout<<"B::show()"<<endl;
}
};
//运行如下程序
int main()
{
A *pa=new A();
B *pb=new B();
cout<<"-------- 1----------"<<endl;
static_cast<A*>(pb)->show(); //print:"B::show()"
cout<<"-------- 2----------"<<endl;
dynamic_cast<A*>(pb)->show();//also print:"B::show()"
cout<<"-------- 3----------"<<endl;
static_cast<B*>(pa)->show(); //print:"A::show()"
cout<<"-------- 4----------"<<endl;
//dynamic_cast<B*>(pa)->show(); //此处会出现异常
if((pb =dynamic_cast<B*>(pa)))
{
pb->show();
}else
{
cout << "dynamic cast fail" << endl;
}
}
输出为:
-------- 1 ----------
B::show()
-------- 2 ----------
B::show()
-------- 3 ----------
A::show()
-------- 4 ----------
dynamic cast fail
记住:如果使用VC编译的话,一定要选择上RTTI支持,否则运行时会出异常的。
爱华网本文地址 » http://www.aihuau.com/a/25101012/143900.html
更多阅读
? ? ? ? ? ? ? ? ? ? ? ? ? ? ??手机水货和行货区别水货,一般是指港行版,亚太版,甚至欧版。只是产地和销售地不同。行货,只是在中国大陆销售的大陆版。高仿,就是外形相似,但系统,软件都无法跟上,质量也很差!常用的一些方法技巧正
当我们翘首以盼iphone5到来的时候,等来的却是iphone4s。既然名字为4S那么肯定继承了之前的iphone4的绝大部分设计,但毕竟是新品,区别还是有的。下面就讲讲iphone4和iphone4s区别iphone4和iphone4s区别——外观篇iphone4和iphone4s区
手机3G卡与2G卡的区别——简介3G手机卡与2G手机卡有什么不同,3G和2G的特点和区别又是什么呢?2G是第二代手机通信技术的简称,3G是第二代手机通信技术的简称。下面将总结一下:手机3G卡与2G卡的区别——工具/原料
电脑闲置的时候,除了关机之外,用户还可以考虑将电脑设为休眠或睡眠状态。与关机相比,系统具有以下休眠和睡眠区别和优点:1:不需要关闭正在进行的工作,电脑唤醒后,所有打开的程序、窗口马上恢复至休眠或睡眠之前的状态,方便用户继续
隔离霜和防晒霜有什么区别?——简介夏天到来,阳光也越来越强,隔离、防晒很重要哦。不过,还是有很多女生,分不清防晒霜和隔离霜的用途和区别,只有正确掌握、使用这两种产品,才能有效阻挡紫外线,让你更好地保护肌肤美美度过这个夏天。跟随小编