MFC 動態建立機制 模擬實現

2021-05-21 11:48:49 字數 1231 閱讀 7374

mfc  動態建立機制 模擬實現

動態建立的難點在於,你不能夠根據從檔案中或者使用者的輸入中根據類名稱來建立乙個物件。

mfc實現動態建立的方法還是在於cruntimeclass ,及其建立起來的型別網路。它在cruntimeclass中加入了新的成分:cruntimeclass::createobject  函式,因為cruntimeclass中已經儲存了對於類的名稱,所以當獲得使用者輸入的類名稱後,就可以在cruntimeclass中查詢,如果名稱相同,那麼就呼叫cruntimeclass::createobject函式產生動態物件,從而實現了動態建立。

下面我們來看具體的定義和實現:

struct  cruntimeclass;

我們接下來又故伎重演,用兩個巨集來定義和實現這些:

它們是  declare_dyncreate 和 implement_dyncreate  

分別定義如下:

#define   declare_dyncreate (class_name)/

declare_dynmic(clsss_name)/

static  cobject * pascal   createobject();

明顯就是先定義原先的cruntimeclass再加上createobject的定義,這樣就可以知道,擁有動態建立能力的類,肯定有型別識別的能力。

#define   impelement_dyncreate /

cobject * class_name::createobject()/

/_implement_runtimeclass(class_name,base_class_name,0xffff,class_name::createobject);

首先實現createobject函式,很簡單,用new 建立乙個物件就好,呵呵。

然後,就是cruntimeclass 的賦值,包括將createobject賦值給   m_pfncreateobject成員。

//假設從使用者的輸入來建立物件,那麼load模擬如下

cruntimeclass * pascal  cruntimeclass::load()

//如果沒有找到對應的cruntimeclass ,那麼返回null

return  null;}

最後,我們就可以這樣來模擬動態建立了:

cruntimeclass * prunclass=cruntimeclass::load();

if(prunclass)

初識MFC 動態建立機制

1 動態建立機制的作用 在不知道類名的情況下,將類的物件建立出來。2 動態建立機制的使用 2.1類必須從cobject派生 2.2類內必須新增宣告巨集 declare dyncreate 2.3類外必須新增實現巨集 implement dyncreate cruntimeclass createob...

模擬實現通訊錄 動態

通訊錄 靜態版 題目描述 實現乙個通訊錄 通訊錄可以用於儲存1000個人的資訊 每個人的資訊包括 姓名,性別,年齡,住址 提供的方法 1.新增聯絡人資訊 2.刪除指定聯絡人資訊 3.查詢指定聯絡人資訊 4.修改指定聯絡人資訊 5.顯示所有聯絡人資訊 6.清空聯絡人資訊 7.以名字排序所有聯絡人 模擬...

MFC六大機制之五 動態建立機制

什麼叫動態建立?建立位置型別的物件,我們可以先寫乙個建立物件的函式,要求是任何類的物件都可以使用該函式去建立,也包括後來定義的類。你給我哪個類這個函式就能建立這個類的物件,函式在類的定義之前 1.建乙個win32控制台程式。2.將stdafx.h 新增標頭檔案。3.project settings選...