首页 > 代码库 > dynamic_cast的用处
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_Hclass 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 0;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。