程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 深度剖析C++語言特點

深度剖析C++語言特點

編輯:C++入門知識

C++作為一種語言,大多數的人都是把它默認為面向對象的支持,認為他就是C語言的替代品,一種延伸而已,而事際上,C++與C是完全不同的語言。用過C++語言的朋友都覺得C++語言的確是個好語言。

但有時由於特殊需要,不得不用C++,在C++中要想實現C#中的Thread等也是可行的,不過代碼要稍復雜:

  1. //delegate 0  
  2. #define DEFINE_DELEGATE(NAME, R)\  
  3. class NAME##Delegate\  
  4. {\  
  5. public:\  
  6. virtual ~NAME##Delegate(void){ }\  
  7. virtual R operator()(void) = 0;\  
  8. };\  
  9. template\  
  10. class NAME##DelegateImpl : public NAME##Delegate\  
  11. {\  
  12. private:\  
  13. typedef R (C::*F)(void);\  
  14. C* m_class;\  
  15. F m_fun;\  
  16. public:\  
  17. NAME##DelegateImpl(C* c, F f){ m_class = c; m_fun = f; }\  
  18. virtual R operator()(void)\  
  19. {\  
  20. if(m_class)\  
  21. return (m_class-*m_fun)();\  
  22. }\  
  23. };\  
  24. template\  
  25. NAME##Delegate* Make##NAME##Delegate(C* c, F f)\  
  26. {\  
  27. return new NAME##DelegateImpl(c, f);\  
  28. }  
  29. //////////////////////////////////////////////////////////////////////////  
  30. //delegate 1  
  31. #define DEFINE_DELEGATE(NAME, R, P1)\  
  32. class NAME##Delegate\  
  33. {\  
  34. public:\  
  35. virtual ~NAME##Delegate(void){ }\  
  36. virtual R operator()(P1 p1) = 0;\  
  37. };\  
  38. template\  
  39. class NAME##DelegateImpl : public NAME##Delegate\  
  40. {\  
  41. private:\  
  42. typedef R (C::*F)(P1);\  
  43. C* m_class;\  
  44. F m_fun;\  
  45. public:\  
  46. NAME##DelegateImpl(C* c, F f){ m_class = c; m_fun = f; }\  
  47. virtual R operator()(P1 p1)\  
  48. {\  
  49. if(m_class)\  
  50. return (m_class-*m_fun)(p1);\  
  51. }\  
  52. };\  
  53. template\  
  54. NAME##Delegate* Make##NAME##Delegate(C* c, F f)\  
  55. {\  
  56. return new NAME##DelegateImpl(c, f);\  

這個例子比較簡單C++語言用來實現某個功能,client是客戶程序,要想在m_sdk做處理的時候能發送通知到client,有幾個方法可以實現。其一是發線程消息,其一是回調,但傳統的回調對面向對象的支持並不好,這就是實現delegate的出發點。 下面是一個實現: class Delegate

  1. DEFINE_DELEGATE(Open, void, int, string)  
  2. class sdk  
  3. {  
  4. public:  
  5. OpenDelegate* pEvent;  
  6. sdk(): pEvent(NULL) { }  
  7. void Open()  
  8. {  
  9. cout  
  10. if(pEvent != NULL)  
  11. (*pEvent)(100, "你好");  
  12. }  
  13. };  
  14. class client  
  15. {  
  16. private:  
  17. sdk m_sdk;  
  18. public:  
  19. client()  
  20. {  
  21. m_sdk.pEvent = MakeOpenDelegate(this, OnOpen2);  
  22. }  
  23. void Open()  
  24. {  
  25. m_sdk.Open();  
  26. }  
  27. void OnOpen()  
  28. {  
  29. cout  
  30. }  
  31. void OnOpen2(int t, string str)  
  32. {  
  33. cout  
  34. }  
  35. }; 
  1. C與C++中標准輸入實現方式上的一點區別
  2. C++編譯器如何對Const常量進行分配存儲空間
  3. C++類庫設計的基本構思與方法
  4. 玩轉C++語言的幾種方法
  5. 如何更好的進行C++代碼編制

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved