首页 > 代码库 > 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;}