C++-dynamic_cast的用处
主要用来在没有实现文件,只有头文件的情况下,添加派生类的功能,如下例给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的用处的更多相关文章
- RTTI: dynamic_cast typeid
dynamic_cast:将基类类型的指针向派生类指针安全转换.多用于下行转换.上行转换时,和static_cast是一样的.C++类型转换看这里.而const_cast用来修改类型的const或vo ...
- 【repost】document.write的用处
document.write的用处 document.write是JavaScript中对document.open所开启的文档流(document stream操作的API方法,它能够直接在文档流中 ...
- 【转】代码中特殊的注释技术——TODO、FIXME和XXX的用处
(转自:http://blog.csdn.net/reille/article/details/7161942) 作者:reille 本博客网址:http://blog.csdn.net/reille ...
- 使用angular中ng-repeat , track by的用处
我们见到最简单的例子是: <div ng-repeat="link in links" ></div> 如果item的值有重复的,比如links=[&quo ...
- github的pull request是指什么意思?有什么用处
github的pull request是指什么意思? 来看看某乎某位阿牛的理解,多么的简单粗暴! 我尝试用类比的方法来解释一下 pull reqeust.想想我们中学考试,老师改卷的场景吧.你做的试卷 ...
- Docker对普通开发者的用处(转)
有些开发者可能还是不明白 Docker 对自己到底有多大的用处,因此翻译 Docker 个人用例 这篇文章中来介绍 Docker 在普通开发者开发过程中的用例. Docker 如今赢得了许多关注,很多 ...
- java中的反射机制在Android开发中的用处
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反 ...
- c++ 数据类型转换: static_cast dynamic_cast reinterpret_cast const_cast
c++ 数据类型转换: static_cast dynamic_cast reinterpret_cast const_cast [版权声明]转载请注明出处 http://www.cnblogs.c ...
- C++ dynamic_cast对指针类型的转换
C8-3 三角形还是长方形? (100.0/100 points) 题目描述 在多态概念中,基类的指针既可以指向基类的对象,又可以指向派生类的对象.我们可以使用dynamic_cast类型转换操作符来 ...
随机推荐
- you don't have permission to view it 解决
the file couldn't be opened because you don't have permission to view it 简单设置下面的选项即可,不要谢我啊! change ...
- openfire升级指南
原文:http://www.liuhaihua.cn/archives/355.html 升级Openfire是和从头开始安装Openfire几乎一样简单.作为升级过程的一部分,它强烈建议您先备份当前 ...
- Hibernate中的Configuration类
Configuration类用来管理我们的配置文件的信息的,通过它,我们可以通过创建一个configuration实例来管理相应的配置文档,但是通常我们只创建一个configuration实例. 下面 ...
- Android_进化史和平台架构介绍
一.Android平台发展史 2008年9月,谷歌正式发布了Android 1.0系统,全球第一台Android设备HTC (G1) 2009年4月,谷歌正式推出了Android 1.5 ...
- Css_2跟3
#css2中的选择器 1.元素选择器 *通配符选择符.html类型选择符.id选择符.class选择符 2.关系选择器 E F(包含选择器).E>F(子选择器).E+F(E元素后 ...
- IIS_Mvc发布
网站发布步骤: 这部分是转载文章 在此标明出处,以前有文章是转的没标明的请谅解,因为有些已经无法找到出处,或者与其它原因. 如有冒犯请联系本人,或删除,或标明出处. 因为好的文章,以前只想收藏,但连接 ...
- Hbase之更新单条数据
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; impo ...
- jstree级联查找树
<script > obj=$.jstree.reference($('#plugins4')); function PP(obj,e,filename){ if (obj.get_par ...
- Computer assembly and maintenance
转载请注明出处: 我所遇见的世界会更美好 第一章 计算机的基本构成和组装 1,内存的组成? (1) RAM(随机存取存储器) (2) ROM(只读存储器) (3) Cache(高速缓存) 2,S ...
- 使用XIB实现一个简单view
技术处女贴 欢迎来探讨 转帖请注明出处 http://www.cnblogs.com/andy-zhou/p/4962135.html 微信: @Andy 1. AppDelegate AppDele ...