成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C++動態創建對象應用技術講解

開發 后端
C++動態創建對象的方式有很多種,我們可以通過對這篇文章的解讀充分掌握這方面的知識,以方便我們將來的實際編程。

C++是一款功能強大的基于C語言的計算機編程語言。它不但能支持各種C語言的功能,還可以對包括面向對象在內的各種程序設計風格的支持。我們今天會為大家詳細介紹一下有關C++動態創建對象的一些應用技巧。#t#

Native C++是不支持根據類名的C++動態創建對象,比如從一個文本文件中讀取類名然后構造一個對象.主要原因是沒有豐富的動態元信息,沒有單根類庫。然而可以用幾種技術進行實現。如果是類似Spring那樣的根據配置文件運行時產生實現某個接口的對象,那么在Windows中至少有三種辦法:

1. LoadLibrary + GetProcAdress。這個不用多解釋,可以把DLL和Proc的名字動態傳入。

2. COM,根據動態獲得的CLSID調用GetClassObject獲得IClassFactory接口,然后CreateInstance。或者直接調用CoCreateInstance/CoCreateInstanceEx動態產生CoClass。

3. MFC dynamic creation。

Native C++不能在運行時編譯代碼并即時產生對象,所以JIT的動態生成在C++里做不到。在MFC中,可以參考,總結如下:

MFC的C++動態創建對象可能是最容易使用的方案。查了一下MFC中RTCI的實現,總結一下:

DECLARE_ DYNCREATE(class_name)宏展開后是如下形式:

假設class_name是“CMyClass”

  1. public:  
  2. static CRuntimeClass classCMyClass;  
  3. virtual CRuntimeClass* GetRuntimeClass() const;  
  4. static CObject* CreateObject(); 

這幾行會被加入到CMyClass類的聲明中。

IMPAEMENT_DYNCREATE(classname,base_classname)宏定義比較復雜,這個宏展開后類似如下的樣子:

  1. AFX_DATADEF CRuntimeClass CMyClass::classCMyClass = {  
  2. "CMyClass",sizeof(CMyClass),0xFFFF,NULL,RUNTIME_CLASS(CObject),NULL};  
  3. static const AFX_CLASSSINIT _init_CMyClass(&CMyClass::classCMyClass);  
  4. CRuntimeClass* CMyClass::GetRuntimeClass() const  
  5. {  
  6. Return & CMyClass::classCMyClass;  
  7. }  
  8. CObject* PASCAL CMyClass::CreateObject()  
  9. {  
  10. return new CMyClass;  

這個宏做了如下3件事情:

1.初始化CRuntimeClass類型的成員變量classCMyClass

2.創建靜態AFX_CLASSINIT結構,該結構如下:

  1. Struct AFX_CLASSINIT  
  2. {AFX_CLASSINIT(CRuntimeClass* pNewClass);}; 

這個步驟地主要作用是把CMyClass::classCMyClass添加到MFC的一個內部鏈表中去。

3.覆蓋GetRuntimeClass(),以返回成員變量classCMyClass的地址。

  1. RUNTIME_CLASS宏展開后如下:  
  2. (&class_name::class##class_name) 

C++動態創建對象的時候,調用CRuntime::CreateObject()方法。

這個方法實際上會去調用CRuntime中的一個成員指針,這個指針指向的正是CMyClass::CreateObject()方法。

由上可見,RuntimeClass宏可接受字符串作為參數,但是,仍然需要在編譯時定義好需要動態創建的對象類型,上文例子中為CMyClass。通過MFC的這個特性,理論上還是可以從配置文件中讀取文本,然后按照文本指定的類型C++動態創建對象,但必須要求在編譯時就存在這種類型,不能像動態語言那樣無限制的擴展。另外CMyClass必須繼承自CObject。

責任編輯:曹凱 來源: 博客園
相關推薦

2011-07-20 17:23:29

C++持久對象

2010-02-03 10:11:17

C++動態數組

2013-05-27 15:38:37

Java對象C++

2010-02-05 13:52:04

C++資源管理

2010-02-02 17:20:44

C++ switch-

2010-02-01 17:37:35

C++調用C鏈接庫

2023-01-06 19:02:23

應用技術

2011-05-30 09:17:18

光纖

2015-06-02 10:08:51

布線技術光纖

2010-02-04 17:49:04

C++參數傳遞

2010-02-03 17:06:36

C++對象復制

2010-03-10 13:59:40

Python異常處理

2010-03-11 15:01:52

Python源碼

2010-04-14 16:24:44

寬帶無線接入

2015-09-01 10:14:21

機房直冷優化

2011-05-18 17:15:45

2010-02-01 15:01:34

C++拋出異常

2010-02-24 16:52:59

WCF支持WebGet

2011-07-15 00:47:13

C++多態

2009-09-03 14:14:52

RHEL ASMySQLroot密碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美激情在线一区二区三区 | 欧美色欧美亚洲另类七区 | 午夜极品| 亚洲一区二区三区高清 | 久久综合久色欧美综合狠狠 | 欧美精品一区三区 | 久久精品国产亚洲 | 色婷婷精品国产一区二区三区 | 999视频在线播放 | 亚洲九色 | 日韩精品一区二区三区中文字幕 | 黄色片在线 | 精品美女视频在免费观看 | 粉嫩国产精品一区二区在线观看 | 少妇一级淫片aaaaaaaaa | 精品99在线| 久久久精品国产 | 国产精品久久久久久久久久久免费看 | 久久av一区 | 亚洲日本一区二区三区四区 | 国产乱码精品一区二区三区忘忧草 | 国产精品久久久久久吹潮 | 国产乱码精品1区2区3区 | 国产91丝袜在线播放 | 欧美乱淫视频 | 成人精品一区二区三区中文字幕 | 精品国产欧美日韩不卡在线观看 | 久久精品国产99国产精品亚洲 | 一区二区中文 | 国产精品一区二区三区四区五区 | 精品亚洲一区二区三区 | 手机看片169| 国产精品精品久久久 | 涩涩视频网站在线观看 | 毛片免费视频 | 国产一区二区在线免费观看 | 亚洲大片在线观看 | 国产乱码久久久久久一区二区 | 天天干天天玩天天操 | 成人久久视频 | 日本亚洲欧美 |