dynamic_cast 例子

来源:互联网 发布:淘宝助理发件人设置 编辑:程序博客网 时间:2024/05/17 03:31
#pragma once#include <string>using namespace std;class  NCEventArg{public:enum MSGType{CENTRAL_WIN_CHANGE, ALARM, TOOL_CHANGE,  \KEYBOARD, MARGIN_WIN_CHANGE, GENERAL, CLOSE, RESTART};protected:MSGType _EventType;public:NCEventArg(void){};virtual ~NCEventArg(void){};MSGType GetEventType() const {return _EventType;}};class CenteralWinChangeEventArg : public NCEventArg{public:CenteralWinChangeEventArg(void){ _EventType = CENTRAL_WIN_CHANGE;}~CenteralWinChangeEventArg(void){}void SetEvent(string str){_eventMsg = str;}string GetEvent(){return _eventMsg;}private:string _eventMsg;};class Alarm : public NCEventArg{public:Alarm(void){ _EventType = ALARM;}~Alarm(void){}void SetEvent(string str){_eventMsg = str;}string GetEvent(){return _eventMsg;}private:string _eventMsg;};class ToolChange : public NCEventArg{public:ToolChange(void){ _EventType = TOOL_CHANGE;}~ToolChange(void){}void SetEvent(string str){_eventMsg = str;}string GetEvent(){return _eventMsg;}private:string _eventMsg;};class MarginWinChange : public NCEventArg{public:MarginWinChange(void){ _EventType = MARGIN_WIN_CHANGE;}~MarginWinChange(void){}void SetEvent(string str){_eventMsg = str;}string GetEvent(){return _eventMsg;}private:string _eventMsg;};void test(NCEventArg &e){if(CenteralWinChangeEventArg *centerEvent =  dynamic_cast<CenteralWinChangeEventArg*>(&e)){cout << "CenteralWinChange" << endl;cout << centerEvent->GetEvent() << endl;}else if(Alarm *centerEvent =  dynamic_cast<Alarm*>(&e)){cout << "Alarm"<< endl;cout << centerEvent->GetEvent() << endl;}else if(ToolChange* toolChange = dynamic_cast<ToolChange*>(&e)){cout << "Tool change"<< endl;cout << toolChange->GetEvent() << endl;}else if(MarginWinChange* marginWinChange = dynamic_cast<MarginWinChange*>(&e)){cout << "MarginWinChange"<< endl;cout << centerEvent->GetEvent() << endl;}}int main(void){Alarm e;e.SetEvent("AlarmEvent");test(e);CenteralWinChangeEventArg e1;e1.SetEvent("centerEvent");test(e1);ToolChange e2;e2.SetEvent("ToolChangeEvent");test(e2);}

0 0