深度剖析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);\  
  57.   } 

这个例子比较简单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++代码编制
责任编辑:chenqingxiang 来源: CSDN
相关推荐

2010-02-26 10:38:29

Python语言

2010-01-25 17:29:10

C++语言

2010-01-26 17:16:33

C++应用程序

2010-01-15 10:32:21

C++语言

2010-02-22 18:08:27

Python语言

2010-01-18 18:14:37

VB.NET语言特点

2010-01-28 16:31:54

C++类型

2010-02-26 14:50:17

Python操作语言

2010-01-27 15:50:23

C++复杂性

2010-01-13 10:16:42

C++软件

2010-01-28 14:54:01

C++资源管理

2010-01-11 10:19:57

C++开发工具

2010-01-11 17:43:23

C++程序设计

2010-01-13 11:14:06

C++虚表

2010-07-05 14:38:34

UML各种图形

2010-01-12 15:03:33

C++代码

2015-11-30 11:14:59

C++对象池自动回收

2010-01-14 17:42:47

CC++

2010-03-01 18:33:30

2010-01-13 13:42:55

C++编译器
点赞
收藏

51CTO技术栈公众号