关闭

Dynamic_cast

834人阅读 评论(0) 收藏 举报

// 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;
}

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:158571次
    • 积分:2763
    • 等级:
    • 排名:第12993名
    • 原创:117篇
    • 转载:30篇
    • 译文:0篇
    • 评论:8条
    文章分类
    最新评论