dynamic_cast的问题

doolin 2004-09-13 01:58:39
dynamic_cast是被用于安全的沿着类的继承关系向下进行类型转换.
看这个例子:
class Class
{
public:
Class(){
cout << "10" << endl;
}
virtual ~Class(){
cout << "11" << endl;
}

};

class Class_A : public Class
{
public:
Class_A(){
cout << "20" << endl;
}
virtual ~Class_A(){
cout << "21" << endl;
}
};

class Class_B : public Class_A{
public:
Class_B(){
cout << "30" << endl;
}
virtual ~Class_B(){
cout << "31" << endl;
}
};

但为什么这样的转换也会成功:
Class_B *pb = new Class_B;
Class_A *pa = dynamic_cast<Class_A *>(pb);
这样不是向上转换吗?
...全文
118 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
doolin 2004-09-13
  • 打赏
  • 举报
回复
to 回复人: 248406869(笨笨):
不明白你的意思?
cxc014 2004-09-13
  • 打赏
  • 举报
回复
向上转型时:
Class_A *pa = dynamic_cast<Class_A *>(pb); //*pb is-a *pa,所以成功
向下转型时:
eg:
Class_B *pb = dynamic_cast<Class_B *>(pa);
(1)如果pa 指向Class_B的对象,当然成功;
(2)否则失败,pb = 0;
248406869 2004-09-13
  • 打赏
  • 举报
回复
请注意你写的是指针不是类,他不存在怎么传的问题。
doolin 2004-09-13
  • 打赏
  • 举报
回复
我的问题正是'为什么能成功',为什么能在类的继承层次上的2个相反的方向进行类型转换.
我想知道dynamic_cast的机制
短歌如风 2004-09-13
  • 打赏
  • 举报
回复
向上转换时不需要用dynamic_cast,但你一定要用也没有问题。
dynamic_cast的作用是可以安全地向下转换,但没有说它不能向上转换,只是不用它也可以。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧