#include <iostream>

 class A
{
public:
A(){}
~A(){}
virtual int data(){return ;}
};
class B:public A
{
public:
B(){}
~B(){}
int data(){return ;}
}; class C:public A
{
public:
C(){}
~C(){}
int data(){return ;}
}; class D:public C
{
public:
D(){}
~D(){}
int data(){return ;}
}; int main()
{ std::cout<<"dynamic_cast begin \n";
A *a=new A;
B *b=new B;
C *c=new C;
D *d=new D; if(dynamic_cast<B*> (a)) //this will fail 派生类不能指向基类
{
std::cout<<"A *a convert B class ok\n";
} if(dynamic_cast<A*> (b)) // this will be ok 基类指向派生类 ok
{
std::cout<<"B *b convert A class ok\n";
} if(dynamic_cast<C*> (a)) // 派生类不能指向基类
{
std::cout<<"A *a convert C class ok\n";
} if(dynamic_cast<A*> (c)) //c派生类 所以可以被A指向
{
std::cout<<"A *a convert C class ok\n";
} if(dynamic_cast<A*> (d)) // A <- C <- D 基类可以指向派生类 ok
{
std::cout<<"D *d convert A class ok\n";
} if(dynamic_cast<D*> (c)) // 派生类不能指向基类
{
std::cout<<"C *c convert D class ok\n";
} if(dynamic_cast<C*> (d)) // C基类可以指向派生类D ok
{
std::cout<<"D *d convert C class ok\n";
} if(dynamic_cast<D*> (d)) // ok
{
std::cout<<"d *d convert D class ok\n";
} std::cin.get();
return ;
}

dynamics_cast<>的更多相关文章

随机推荐

  1. 关于padding与margin的区别

    代码一:全为padding. <!doctype html><html><head>    <meta charset="UTF-8"&g ...

  2. fn标签常用方法使用说明

    需要jstl.jar包,然后在jsp页头导入 <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix=& ...

  3. bzoj1150: [CTSC2007]数据备份Backup--贪心+优先队列维护堆

    题目大意:将k对点两两相连,求最小长度 易证得,最优方案中,相连的办公楼一定是取相邻的比取不相邻的要更优 然后就可以用贪心来做这道题了.. 之前向CZL大神学习了用堆来贪心的做法orz 大概思路就是将 ...

  4. oracle 字符乱码问题解决方案

    今天在客户服务器上遇到了oracle中文乱码问题,第一个想到的是:要想避免oracle字符乱码的问题,需要注意oracle客户端的字符编码和服务端的字符编码保持一致. 于是操作如下: 1.查看服务端字 ...

  5. Python 基础 - 对文本的处理

    Python 对文本文件的处理. 对文本操作之前,必须要先open 这个文件,open完成之后需要close . # -*- coding: utf-8 -*- f=open('test.txt',' ...

  6. BZOJ1857[SCOI2010]传送带

    题目大意:平面上两条线段,一个人从一条线段的一个点到另一条线段的一个点,最小时间是多少 路径肯定是在一条线段上走一段,然后走平面,最后再走另一条线段,那么需要确定的就是在两条线段上走的距离,其他暴力算 ...

  7. Construct a tree from Inorder and Level order traversals

    Given inorder and level-order traversals of a Binary Tree, construct the Binary Tree. Following is a ...

  8. Password Attacker

    Passwords are widely used in our lives: for ATMs, online forum logins, mobile device unlock and door ...

  9. DS实验题 Order 已知父节点和中序遍历求前、后序

    题目: 思路: 这题是比较典型的树的遍历问题,思路就是将中序遍历作为位置的判断依据,假设有个节点A和它的父亲Afa,那么如果A和Afa的顺序在中序遍历中是先A后Afa,则A是Afa的左儿子,否则是右儿 ...

  10. Android监听Home键

    监听广播  ACTION_CLOSE_SYSTEM_DIALOGS private void registerHomeReceiver(){ IntentFilter homeFilter = new ...