Dynamic_cast

原创 2006年05月25日 13:53:00

// RTTI_CAST.cpp : Defines the entry point for the console application.
//

/// Summary:
///   There must have inheritress between Source type and target type.
///   if not, static_cast will bring compile error; 
///     dynamic_cast will return false or throw exception.

#include <iostream>
using namespace std;

class A
{
public:
 A(int j = 0): i(j)
 {

 }
 
 virtual ~A() {}

 virtual void Output()
 {
  cout<< i;
 }
private:
 int i;
};

class B : public A
{
public:
 B() : A(1),j(2)
 {

 }

 virtual ~B() {}

 virtual void Output()
 {
  A::Output();

  cout<< j<<endl;
 }
private:
 int j;
};


int _tmain(int argc, _TCHAR* argv[])
{
 char a = 'a';
 int * pI = static_cast<int*>(&a); // failed.

 B b;

 A* pA = dynamic_cast<A*>(&b);

 pA->Output();
 
 const type_info& aInfo = typeid(A);
 const type_info& bInfo = typeid(B);
 
 try
 {
  B* pB = dynamic_cast<B*>(pA);

  pB->Output();
 }
 catch(bad_cast& e)
 {
  std::cout<<e.what()<<endl;
 }
 

 return 0;
}

 

dynamic_cast<>操作数必须是多态类型吗

dynamic_cast是C++运行时的一个类型转换运算符,通常用于自定义类型层次中的向下转型(downcasts),使用形式如下所示: dynamic_cast(e) dynamic_cast(e)...
  • dashuniuniu
  • dashuniuniu
  • 2015年11月03日 21:13
  • 1264

C++中深入理解dynamic_cast

dynamic_cast运算符的主要用途:将基类的指针或引用安全地转换成派生类的指针或引用,并用派生类的指针或引用调用非虚函数。如果是基类指针或引用调用的是虚函数无需转换就能在运行时调用派生类的虚函数...
  • xingkongfenqi
  • xingkongfenqi
  • 2015年10月15日 10:14
  • 1200

c++强制转换之dynamic_cast

dynamic_cast(expression) 用法:该运算符把expression转换成type-id类型的对象。Type-id必须是类的指针、类的引用或者void*;如果type-id是指针类...
  • diaolingle
  • diaolingle
  • 2016年04月20日 02:44
  • 1734

使用dynamic_cast的一点心得

C++程序员大多喜欢使用强制类型转换(我也是),尽管它是C遗留下来的,尽管它存在这样那样的缺点,但是你不能不承认它使用起来很方便,而且绝大多数情况下是不会产生问题的.极少数情况下可能会存在类型转换失败...
  • chencheng126
  • chencheng126
  • 2015年01月26日 16:25
  • 1165

使用dynamic_cast转换的一个例子

分类: 笔试面试
  • u014181676
  • u014181676
  • 2014年03月25日 21:52
  • 442

编程学习笔记之c++相关::dynamic_cast介绍

前端时间我写了一篇有关typeid的博客,在通常情况下,跟随typeid出生入死的,还有一个叫dynamic_cast的好基友,本来它也应该紧随typeid之后一起写出来的,但因家中琐事绵绵,鄙人精力...
  • wenpinglaoyao
  • wenpinglaoyao
  • 2016年01月11日 15:11
  • 938

C++对象模型:多重继承和虚继承的内存布局

这是一篇译文,原文地址:这里;  翻译的文章转自:点击打开链接     这篇文章主要讲解虚继承的C++对象内存分布问题,从中也引出了dynamic_cast和static_cast本质区别、虚函数...
  • u013074465
  • u013074465
  • 2015年06月06日 19:11
  • 1389

C#中dynamic的正确用法

dynamic是FrameWork4.0的新特性。dynamic的出现让C#具有了弱语言类型的特性。编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性。比如,即使你...
  • CNHK1225
  • CNHK1225
  • 2016年12月08日 18:45
  • 381

C++学习之多态篇(运行时类型识别--RTTI(typeid和dynamic_cast))

1.使用方式: dynamic_cast的使用说明: (1)只能有用于指针和引用的转换,将父类指针或引用转换为子类指针和引用 (2)要转换的类型中必须包含虚函数 (3)如果转换成功,返回的就是子...
  • hudfang
  • hudfang
  • 2016年02月03日 14:33
  • 807

dynamic_cast与一般的强制转换

接触过C语言的同学可能很喜欢使用C风格的强制转换(也就是一般形式的强转)。 (类型)变量 用起来很方便,可以显式的把某些类型转换成我们想要的类型,比如(int*)字符。这样的使用对常见的内置类型可谓是...
  • u012999985
  • u012999985
  • 2017年04月04日 12:13
  • 4012
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: Dynamic_cast
举报原因:
原因补充:

(最多只允许输入30个字)