主要用来在没有实现文件,只有头文件的情况下,添加派生类的功能,如下例给programmer加奖金。

注意:dynamic_cast不能用于没有virtual函数的类

///////////////////////////////////////////////////////////////////////////////
//
// FileName : page_content.h
// Version : 0.10
// Author : Ryan Han
// Date : 2013/07/26 16:50:14
// Comment :
//
///////////////////////////////////////////////////////////////////////////////
#ifndef PAGE_CONTENT_H
#define PAGE_CONTENT_H
class employee {
public:
virtual int salary();
}; class manager : public employee {
public:
int salary();
}; class programmer : public employee {
public:
int salary();
void bonus();
}; #endif
///////////////////////////////////////////////////////////////////////////////
//
// FileName : page_content.cpp
// Version : 0.10
// Author : Ryan Han
// Date : 2013/07/26 16:50:14
// Comment :
//
///////////////////////////////////////////////////////////////////////////////
#include "page_content.h" #include <iostream>
using namespace std; int employee::salary() {
cout << "employee::salary() was called. " << endl;
} int manager::salary() {
cout << "manager::salary() was called. " << endl;
} int programmer::salary() {
cout << "programmer::salary() was called. " << endl;
}
///////////////////////////////////////////////////////////////////////////////
//
// FileName : page_content_client.cpp
// Version : 0.10
// Author : Ryan Han
// Date : 2013/07/26 16:50:14
// Comment :
// Output :
// $ ./a
// payroll was called.
// employee::salary() was called.
// This is not programmer
// payroll was called.
// programmer::salary() was called.
// New added programmer::bonus() was called.
///////////////////////////////////////////////////////////////////////////////
#include "page_content.h" #include <iostream>
using namespace std; void payroll(employee *pe) {
cout << "payroll was called. " << endl;
pe->salary(); programmer* pm = dynamic_cast<programmer*>(pe); if(pm)
pm->bonus();
else
cout << "This is not programmer" << endl;
} void programmer::bonus() {
cout << "New added programmer::bonus() was called. " << endl;
} int main() { employee* pe = new employee(); payroll(pe); programmer* pp = new programmer(); payroll(pp); return ;
}

C++-dynamic_cast的用处的更多相关文章

  1. RTTI: dynamic_cast typeid

    dynamic_cast:将基类类型的指针向派生类指针安全转换.多用于下行转换.上行转换时,和static_cast是一样的.C++类型转换看这里.而const_cast用来修改类型的const或vo ...

  2. 【repost】document.write的用处

    document.write的用处 document.write是JavaScript中对document.open所开启的文档流(document stream操作的API方法,它能够直接在文档流中 ...

  3. 【转】代码中特殊的注释技术——TODO、FIXME和XXX的用处

    (转自:http://blog.csdn.net/reille/article/details/7161942) 作者:reille 本博客网址:http://blog.csdn.net/reille ...

  4. 使用angular中ng-repeat , track by的用处

    我们见到最简单的例子是: <div ng-repeat="link in links" ></div> 如果item的值有重复的,比如links=[&quo ...

  5. github的pull request是指什么意思?有什么用处

    github的pull request是指什么意思? 来看看某乎某位阿牛的理解,多么的简单粗暴! 我尝试用类比的方法来解释一下 pull reqeust.想想我们中学考试,老师改卷的场景吧.你做的试卷 ...

  6. Docker对普通开发者的用处(转)

    有些开发者可能还是不明白 Docker 对自己到底有多大的用处,因此翻译 Docker 个人用例 这篇文章中来介绍 Docker 在普通开发者开发过程中的用例. Docker 如今赢得了许多关注,很多 ...

  7. java中的反射机制在Android开发中的用处

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反 ...

  8. c++ 数据类型转换: static_cast dynamic_cast reinterpret_cast const_cast

    c++ 数据类型转换: static_cast dynamic_cast reinterpret_cast const_cast  [版权声明]转载请注明出处 http://www.cnblogs.c ...

  9. C++ dynamic_cast对指针类型的转换

    C8-3 三角形还是长方形? (100.0/100 points) 题目描述 在多态概念中,基类的指针既可以指向基类的对象,又可以指向派生类的对象.我们可以使用dynamic_cast类型转换操作符来 ...

随机推荐

  1. you don't have permission to view it 解决

    the file couldn't be opened because you don't have permission to view it   简单设置下面的选项即可,不要谢我啊! change ...

  2. openfire升级指南

    原文:http://www.liuhaihua.cn/archives/355.html 升级Openfire是和从头开始安装Openfire几乎一样简单.作为升级过程的一部分,它强烈建议您先备份当前 ...

  3. Hibernate中的Configuration类

    Configuration类用来管理我们的配置文件的信息的,通过它,我们可以通过创建一个configuration实例来管理相应的配置文档,但是通常我们只创建一个configuration实例. 下面 ...

  4. Android_进化史和平台架构介绍

    一.Android平台发展史  2008年9月,谷歌正式发布了Android 1.0系统,全球第一台Android设备HTC (G1)  2009年4月,谷歌正式推出了Android 1.5      ...

  5. Css_2跟3

    #css2中的选择器 1.元素选择器     *通配符选择符.html类型选择符.id选择符.class选择符 2.关系选择器     E F(包含选择器).E>F(子选择器).E+F(E元素后 ...

  6. IIS_Mvc发布

    网站发布步骤: 这部分是转载文章 在此标明出处,以前有文章是转的没标明的请谅解,因为有些已经无法找到出处,或者与其它原因. 如有冒犯请联系本人,或删除,或标明出处. 因为好的文章,以前只想收藏,但连接 ...

  7. Hbase之更新单条数据

    import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; impo ...

  8. jstree级联查找树

    <script > obj=$.jstree.reference($('#plugins4')); function PP(obj,e,filename){ if (obj.get_par ...

  9. Computer assembly and maintenance

    转载请注明出处: 我所遇见的世界会更美好 第一章 计算机的基本构成和组装 1,内存的组成? (1)  RAM(随机存取存储器) (2)  ROM(只读存储器) (3)  Cache(高速缓存) 2,S ...

  10. 使用XIB实现一个简单view

    技术处女贴 欢迎来探讨 转帖请注明出处 http://www.cnblogs.com/andy-zhou/p/4962135.html 微信: @Andy 1. AppDelegate AppDele ...