新聞中心
這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
深度剖析C++語言特點
C++作為一種語言,大多數(shù)的人都是把它默認為面向對象的支持,認為他就是C語言的替代品,一種延伸而已,而事際上,C++與C是完全不同的語言。用過C++語言的朋友都覺得C++語言的確是個好語言。

創(chuàng)新互聯(lián)提供高防服務器租用、云服務器、香港服務器、雅安服務器托管等
但有時由于特殊需要,不得不用C++,在C++中要想實現(xiàn)C#中的Thread等也是可行的,不過代碼要稍復雜:
- //delegate 0
- #define DEFINE_DELEGATE(NAME, R)\
- class NAME##Delegate\
- {\
- public:\
- virtual ~NAME##Delegate(void){ }\
- virtual R operator()(void) = 0;\
- };\
- template\
- class NAME##DelegateImpl : public NAME##Delegate\
- {\
- private:\
- typedef R (C::*F)(void);\
- C* m_class;\
- F m_fun;\
- public:\
- NAME##DelegateImpl(C* c, F f){ m_class = c; m_fun = f; }\
- virtual R operator()(void)\
- {\
- if(m_class)\
- return (m_class-*m_fun)();\
- }\
- };\
- template\
- NAME##Delegate* Make##NAME##Delegate(C* c, F f)\
- {\
- return new NAME##DelegateImpl(c, f);\
- }
- //////////////////////////////////////////////////////////////////////////
- //delegate 1
- #define DEFINE_DELEGATE(NAME, R, P1)\
- class NAME##Delegate\
- {\
- public:\
- virtual ~NAME##Delegate(void){ }\
- virtual R operator()(P1 p1) = 0;\
- };\
- template\
- class NAME##DelegateImpl : public NAME##Delegate\
- {\
- private:\
- typedef R (C::*F)(P1);\
- C* m_class;\
- F m_fun;\
- public:\
- NAME##DelegateImpl(C* c, F f){ m_class = c; m_fun = f; }\
- virtual R operator()(P1 p1)\
- {\
- if(m_class)\
- return (m_class-*m_fun)(p1);\
- }\
- };\
- template\
- NAME##Delegate* Make##NAME##Delegate(C* c, F f)\
- {\
- return new NAME##DelegateImpl(c, f);\
- }
這個例子比較簡單C++語言用來實現(xiàn)某個功能,client是客戶程序,要想在m_sdk做處理的時候能發(fā)送通知到client,有幾個方法可以實現(xiàn)。其一是發(fā)線程消息,其一是回調(diào),但傳統(tǒng)的回調(diào)對面向對象的支持并不好,這就是實現(xiàn)delegate的出發(fā)點。 下面是一個實現(xiàn): class Delegate
- DEFINE_DELEGATE(Open, void, int, string)
- class sdk
- {
- public:
- OpenDelegate* pEvent;
- sdk(): pEvent(NULL) { }
- void Open()
- {
- cout
- if(pEvent != NULL)
- (*pEvent)(100, "你好");
- }
- };
- class client
- {
- private:
- sdk m_sdk;
- public:
- client()
- {
- m_sdk.pEvent = MakeOpenDelegate(this, OnOpen2);
- }
- void Open()
- {
- m_sdk.Open();
- }
- void OnOpen()
- {
- cout
- }
- void OnOpen2(int t, string str)
- {
- cout
- }
- };
【編輯推薦】
- C與C++中標準輸入實現(xiàn)方式上的一點區(qū)別
- C++編譯器如何對Const常量進行分配存儲空間
- C++類庫設計的基本構思與方法
- 玩轉C++語言的幾種方法
- 如何更好的進行C++代碼編制
當前名稱:深度剖析C++語言特點
新聞來源:http://www.dlmjj.cn/article/djocgdi.html


咨詢
建站咨詢
