dynamic_cast疑点

blueskywind6 blueskywind6 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include <iostream>
using namespace std;
class A
{
public:
int i;
virtual void show()
{
cout<<"class A"<<endl;
}
A()
{
i=1;
}
};

class B:public A
{
public:
int j;
void show()
{
cout<<"class B"<<endl;
}
B()
{
j=2;
}
};

int _tmain(int argc, _TCHAR* argv[])
{
A a,*pa;
bool bad;
pa=&a;
try
{
bad=true;
B &rb=dynamic_cast<B &>(*pa);
}
catch(bad_cast)
{
cout<<"Reference failed from A & to B &"<<endl;
bad=true;
}
if(!bad)
{
B &rb=dynamic_cast<B &>(*pa);
rb.show();
}
system("PAUSE");
return 0;
}
程序输出结果是:Reference failed from A & to B &
不解,为什么会转换失败呢?请各位仁兄指教
...全文

相关推荐

static_cast,dynamic_cast,reinterpret_cast,const_cast的区别及用法详解

1.static_cast对类的指针只能转换有继承关系的类。对普通的指针来说只能在void*和其他指针之间转换。它还可转换简单的类型,比如int到char等。不能提供数字到指针的转换。不能提供不同类型指针之间的转换比如int*到char*。 2.dynamic_cast提供安全的转换如果两个指针不存在继承关系转换会失败返回空指针,如果你提供一个错误的指针那样会发生内存访问异常,因为它会去比较两个类型的虚函数表。虚函数表的指针一般放在对象指针最开始的四字节中,你去访问一个错误的地址这样肯定会发生异常。 3.reinterpret_cast提供数字到指针间的转换比如void*到int。提供不同类型

weixin_38663701

static_cast、dynamic_cast、reinterpret_cast和const_cast

标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast

greedysky

static_cast,dynamic_cast,reinterpret_cast和const_cast的区别详解

C-style cast举例: int i; double d; i = (int) d;上面的代码就是本来为double类型的d,通过(int)d将其转换成整形值,并将该值赋给整形变量i (注意d本身的值并没有发生改变)。这就是典型的c-style类型转换。下面是一个简单的程序: 代码如下:#include using namespace std;int main(void){         int i;         double d = 11.29;         i = (int)d;         cout &lt;&lt; i &lt;&lt; endl;         co

weixin_38717843

标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast

标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast

蓝天客

C++中的类型转换static_cast、dynamic_cast、const_cast和reinterpret_cast总结

主要介绍了C++中的类型转换static_cast、dynamic_cast、const_cast和reinterpret_cast总结,需要的朋友可以参考下

weixin_38629976
评论 12
收藏 已收藏
分享
返回顶部
blueskywind6
C++ 语言 65,214 成员 250,514 内容