亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mfc教程3_ cobject類.htm

?? 此文件是將MFC在線教程的14個網頁打包
?? HTM
?? 第 1 頁 / 共 3 頁
字號:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0041)http://www.vczx.com/tutorial/mfc/mfc3.php -->
<HTML><HEAD><TITLE>MFC教程_ CObject類</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content="MSHTML 6.00.2900.3157" name=GENERATOR></HEAD>
<BODY bgColor=#ffffff>
<OL start=3>
  <P align=justify>
  <LI><A name=_Toc445782393></A><A name=_Toc452640889></A><A 
  name=_Toc457298954></A><B>CObject類</B> 
  <P></P>
  <P 
  align=justify>CObject是大多數MFC類的根類或基類。CObject類有很多有用的特性:對運行時類信息的支持,對動態創建的支持,對串行化的支持,對象診斷輸出,等等。MFC從CObject派生出許多類,具備其中的一個或者多個特性。程序員也可以從CObject類派生出自己的類,利用CObject類的這些特性。</P>
  <P 
  align=justify>本章將討論MFC如何設計CObject類的這些特性。首先,考察CObject類的定義,分析其結構和方法(成員變量和成員函數)對CObject特性的支持。然后,討論CObject特性及其實現機制。</P>
  <OL>
    <P align=justify>
    <LI><A name=_Toc445888991></A><A name=_Toc445782394></A><A 
    name=_Toc452640890></A><A name=_Toc457298955></A><B>CObject的結構</B> 
    <P></P>
    <P align=justify>以下是CObject類的定義:</P>
    <P align=justify>class CObject</P>
    <P align=justify>{</P>
    <P align=justify>public:</P>
    <P align=justify></P>
    <P align=justify>//與動態創建相關的函數</P>
    <P align=justify>virtual CRuntimeClass* GetRuntimeClass() const;</P>
    <P align=justify>析構函數</P>
    <P align=justify>virtual ~CObject(); // virtual destructors are 
necessary</P>
    <P align=justify></P>
    <P align=justify>//與構造函數相關的內存分配函數,可以用于DEBUG下輸出診斷信息</P>
    <P align=justify>void* PASCAL operator new(size_t nSize);</P>
    <P align=justify>void* PASCAL operator new(size_t, void* p);</P>
    <P align=justify>void PASCAL operator delete(void* p);</P>
    <P align=justify>#if defined(_DEBUG) &amp;&amp; 
    !defined(_AFX_NO_DEBUG_CRT)</P>
    <P align=justify>void* PASCAL operator new(size_t nSize, LPCSTR 
    lpszFileName, int nLine);</P>
    <P align=justify>#endif</P>
    <P align=justify></P>
    <P align=justify>//缺省情況下,復制構造函數和賦值構造函數是不可用的</P>
    <P align=justify>//如果程序員通過傳值或者賦值來傳遞對象,將得到一個編譯錯誤</P>
    <P align=justify>protected:</P>
    <P align=justify>//缺省構造函數</P>
    <P align=justify>CObject();</P>
    <P align=justify>private:</P>
    <P align=justify>//復制構造函數,私有</P>
    <P align=justify>CObject(const CObject&amp; objectSrc); // no 
    implementation</P>
    <P align=justify>//賦值構造函數,私有</P>
    <P align=justify>void operator=(const CObject&amp; objectSrc); // no 
    implementation</P>
    <P align=justify></P>
    <P align=justify>// Attributes</P>
    <P align=justify>public:</P>
    <P align=justify>//與運行時類信息、串行化相關的函數</P>
    <P align=justify>BOOL IsSerializable() const;</P>
    <P align=justify>BOOL IsKindOf(const CRuntimeClass* pClass) const;</P>
    <P align=justify>// Overridables</P>
    <P align=justify>virtual void Serialize(CArchive&amp; ar);</P>
    <P align=justify>// 診斷函數</P>
    <P align=justify>virtual void AssertValid() const;</P>
    <P align=justify>virtual void Dump(CDumpContext&amp; dc) const;</P>
    <P align=justify></P>
    <P align=justify>// Implementation</P>
    <P align=justify>public:</P>
    <P align=justify>//與動態創建對象相關的函數</P>
    <P align=justify>static const AFX_DATA CRuntimeClass classCObject;</P>
    <P align=justify>#ifdef _AFXDLL</P>
    <P align=justify>static CRuntimeClass* PASCAL _GetBaseClass();</P>
    <P align=justify>#endif</P>
    <P align=justify>};</P>
    <P align=justify></P>
    <P align=justify>由上可以看出,CObject定義了一個CRuntimeClass類型的靜態成員變量:</P>
    <P align=justify>CRuntimeClass classCObject</P>
    <P align=justify>還定義了幾組函數:</P>
    <P align=justify>構造函數析構函數類,</P>
    <P align=justify>診斷函數,</P>
    <P align=justify>與運行時類信息相關的函數,</P>
    <P align=justify>與串行化相關的函數。</P>
    <P 
    align=justify>其中,一個靜態函數:_GetBaseClass;五個虛擬函數:析構函數、GetRuntimeClass、Serialize、AssertValid、Dump。這些虛擬函數,在CObject的派生類中應該有更具體的實現。必要的話,派生類實現它們時可能要求先調用基類的實現,例如Serialize和Dump就要求這樣。</P>
    <P align=justify>靜態成員變量classCObject和相關函數實現了對CObjet特性的支持。</P>
    <P align=justify></P>
    <LI><A name=_Toc445888992></A><A name=_Toc445782395></A><A 
    name=_Toc452640891></A><A name=_Toc457298956></A><B>CObject類的特性</B> 
    <P></P></LI></OL></LI></OL>
<P align=justify>下面,對三種特性分別描述,并說明程序員在派生類中支持這些特性的方法。</P>
<OL>
  <P align=justify>
  <LI>對運行時類信息的支持 
  <P></P></LI></OL>
<P 
align=justify>該特性用于在運行時確定一個對象是否屬于一特定類(是該類的實例),或者從一個特定類派生來的。CObject提供IsKindOf函數來實現這個功能。</P>
<P align=justify>從CObject派生的類要具有這樣的特性,需要:</P>
<UL>
  <P align=justify>
  <LI>定義該類時,在類說明中使用DECLARE_DYNAMIC(CLASSNMAE)宏; 
  <P></P>
  <P align=justify></P>
  <LI>在類的實現文件中使用IMPLEMENT_DYNAMIC(CLASSNAME,BASECLASS)宏。 
  <P></P></LI></UL>
<P align=justify></P>
<OL>
  <P align=justify>
  <LI>對動態創建的支持 
  <P></P></LI></OL>
<P 
align=justify>前面提到了動態創建的概念,就是運行時創建指定類的實例。在MFC中大量使用,如前所述框架窗口對象、視對象,還有文檔對象都需要由文檔模板類(CDocTemplate)對象來動態的創建。</P>
<P align=justify>從CObject派生的類要具有動態創建的功能,需要:</P>
<UL>
  <P align=justify>
  <LI>定義該類時,在類說明中使用DECLARE_DYNCREATE(CLASSNMAE)宏; 
  <P></P>
  <P align=justify></P>
  <LI>定義一個不帶參數的構造函數(默認構造函數); 
  <P></P>
  <P align=justify></P>
  <LI>在類的實現文件中使用IMPLEMENT_DYNCREATE(CLASSNAME,BASECLASS)宏; 
  <P></P>
  <P align=justify></P>
  <LI>使用時先通過宏RUNTIME_CLASS得到類的RunTime信息,然后使用CRuntimeClass的成員函數CreateObject創建一個該類的實例。 

  <P></P></LI></UL>
<P align=justify>例如:</P>
<P align=justify>CRuntimeClass* pRuntimeClass = RUNTIME_CLASS(CNname)</P>
<P align=justify>//CName必須有一個缺省構造函數</P>
<P align=justify>CObject* pObject = pRuntimeClass-&gt;CreateObject();</P>
<P align=justify>//用IsKindOf檢測是否是CName類的實例</P>
<P align=justify>Assert( pObject-&gt;IsKindOf(RUNTIME_CLASS(CName));</P>
<P align=justify></P>
<OL>
  <P align=justify>
  <LI>對序列化的支持 
  <P></P></LI></OL>
<DIR>
<P 
align=justify>“序列化”就是把對象內容存入一個文件或從一個文件中讀取對象內容的過程。從CObject派生的類要具有序列化的功能,需要:</P></DIR>
<UL>
  <P align=justify>
  <LI>定義該類時,在類說明中使用DECLARE_SERIAL(CLASSNMAE)宏; 
  <P></P>
  <P align=justify></P>
  <LI>定義一個不帶參數的構造函數(默認構造函數); 
  <P></P>
  <P align=justify></P>
  <LI>在類的實現文件中使用IMPLEMENT_SERIAL(CLASSNAME,BASECLASS)宏; 
  <P></P>
  <P align=justify></P>
  <LI>覆蓋Serialize成員函數。(如果直接調用Serialize函數進行序列化讀寫,可以省略前面三步。) 
  <P></P></LI></UL>
<P align=justify></P>
<P 
align=justify>對運行時類信息的支持、動態創建的支持、串行化的支持層(不包括直接調用Serailize實現序列化),這三種功能的層次依次升高。如果對后面的功能支持,必定對前面的功能支持。支持動態創建的話,必定支持運行時類信息;支持序列化,必定支持前面的兩個功能,因為它們的聲明和實現都是后者包含前者。</P>
<OL>
  <P align=justify>
  <LI>綜合示例: 
  <P></P></LI></OL>
<P align=justify>定義一個支持串行化的類CPerson:</P>
<P align=justify>class CPerson : public CObject</P>
<P align=justify>{</P>
<DIR>
<P align=justify>public:</P></DIR>
<P align=justify>DECLARE_SERIAL( CPerson )</P>
<P align=justify>// 缺省構造函數</P>
<P align=justify>CPerson(){}{};</P>
<P align=justify></P>
<P align=justify>CString m_name;</P>
<P align=justify>WORD m_number;</P>
<P align=justify></P>
<P align=justify>void Serialize( CArchive&amp; archive );</P>
<P align=justify></P>
<P align=justify>// rest of class declaration</P>
<P align=justify>};</P>
<P align=justify></P>
<P align=justify>實現該類的成員函數Serialize,覆蓋CObject的該函數:</P>
<P align=justify>void CPerson::Serialize( CArchive&amp; archive )</P>
<P align=justify>{</P>
<P align=justify>// 先調用基類函數的實現</P>
<P align=justify>CObject::Serialize( archive );</P>
<P align=justify></P>
<P align=justify>// now do the stuff for our specific class</P>
<P align=justify>if( archive.IsStoring() )</P>
<P align=justify>archive &lt;&lt; m_name &lt;&lt; m_number;</P>
<P align=justify>else</P>
<P align=justify>archive &gt;&gt; m_name &gt;&gt; m_number;</P>
<P align=justify>}</P>
<P align=justify></P>
<P align=justify>使用運行時類信息:</P>
<P align=justify>CPerson a; </P>
<P align=justify>ASSERT( a.IsKindOf( RUNTIME_CLASS( CPerson ) ) );</P>
<P align=justify>ASSERT( a.IsKindOf( RUNTIME_CLASS( CObject ) ) );</P>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
aaa亚洲精品一二三区| 国产精品欧美久久久久一区二区| 精品久久久久一区二区国产| 中文字幕精品一区| 日韩一区精品视频| 色婷婷综合久久久中文一区二区 | 久久久不卡影院| 亚洲国产精品久久久久秋霞影院| 国产传媒日韩欧美成人| 日韩欧美国产午夜精品| 亚洲一区二区在线视频| 色综合天天天天做夜夜夜夜做| 日韩免费福利电影在线观看| 亚洲一线二线三线视频| 国产成人av影院| 欧美不卡一区二区三区四区| 午夜精品久久久久久久| 色一情一乱一乱一91av| 成人欧美一区二区三区白人 | 久久久久久久久岛国免费| 日韩精品电影在线观看| 欧美日韩国产成人在线免费| 尤物视频一区二区| 色94色欧美sute亚洲线路二 | 成人国产一区二区三区精品| 精品久久久久久久人人人人传媒 | 欧美三级韩国三级日本一级| 一区二区三区中文字幕精品精品| 99久免费精品视频在线观看| 中文久久乱码一区二区| 国产成人啪午夜精品网站男同| 日韩精品一区在线| 久久69国产一区二区蜜臀| 欧美一级日韩免费不卡| 久久99久久久久| 日韩美一区二区三区| 久久精品国产久精国产| 精品福利二区三区| 高清不卡在线观看av| 久久精品亚洲乱码伦伦中文 | 国产精品天天摸av网| 国产69精品久久99不卡| 国产精品每日更新| 欧美自拍丝袜亚洲| 蜜臀av一区二区| 国产欧美日韩亚州综合| 99vv1com这只有精品| 亚洲国产精品视频| 日韩亚洲欧美成人一区| 国产精品一区久久久久| 国产精品久久看| 欧美日韩激情一区二区三区| 免费成人在线影院| 国产偷国产偷亚洲高清人白洁| 91丨porny丨在线| 午夜激情久久久| 久久综合久久综合久久| 99久久国产综合色|国产精品| 一区二区欧美在线观看| 日韩欧美国产三级| www.欧美日韩国产在线| 日韩av电影天堂| 国产清纯美女被跳蛋高潮一区二区久久w | 91精品国产品国语在线不卡| 国产一区二区精品久久99| 国产精品免费av| 欧美日本一区二区三区四区| 国产一区二区不卡| 一级精品视频在线观看宜春院| 欧美色欧美亚洲另类二区| 日韩激情一二三区| 国产精品电影一区二区三区| 欧美一区2区视频在线观看| 成人午夜av电影| 视频在线观看91| 亚洲欧洲色图综合| 欧美一区二区三区的| a4yy欧美一区二区三区| 成人高清免费观看| 日本欧美久久久久免费播放网| 国产欧美日韩在线视频| 日韩限制级电影在线观看| 99久久伊人久久99| 精品综合久久久久久8888| 亚洲精品欧美在线| 中文乱码免费一区二区| 亚洲精品在线免费观看视频| 欧美色区777第一页| 99视频热这里只有精品免费| 国产在线精品一区二区| 天使萌一区二区三区免费观看| 国产精品久久久久影院| 久久精品一级爱片| 欧美哺乳videos| 欧美乱妇23p| 色综合久久中文综合久久牛| 成人永久免费视频| 国模少妇一区二区三区| 欧美aaaaa成人免费观看视频| 亚洲午夜电影在线观看| 国产精品久久久久久久久果冻传媒| 欧美www视频| 日韩欧美亚洲国产另类| 欧美一区二区免费观在线| 欧美性xxxxx极品少妇| 99r国产精品| 91女人视频在线观看| 成人高清在线视频| 成人av在线播放网址| 成人18视频在线播放| 成人免费av在线| 成人午夜免费视频| 不卡的电影网站| www.爱久久.com| 91丨porny丨国产入口| www.日韩av| 在线亚洲+欧美+日本专区| 91久久精品国产91性色tv | 国产伦理精品不卡| 国内精品国产成人国产三级粉色| 久久精品国产免费| 国产精品自产自拍| 成人福利电影精品一区二区在线观看| 风间由美一区二区三区在线观看 | 色婷婷综合久久久中文一区二区| 91麻豆国产在线观看| 色欧美片视频在线观看在线视频| 色狠狠桃花综合| 欧美精品一二三| 日韩免费电影网站| 国产精品入口麻豆原神| 亚洲欧美怡红院| 一区二区三区欧美日韩| 日韩精品国产欧美| 国产美女主播视频一区| 成人午夜大片免费观看| 在线观看日韩高清av| 91精品国产入口| 国产日产欧美一区二区视频| 亚洲人成亚洲人成在线观看图片| 亚洲已满18点击进入久久| 日韩精品福利网| 国产成人aaaa| 欧美日韩一卡二卡三卡| 久久综合网色—综合色88| 国产精品久久二区二区| 午夜电影网一区| 国产精品一区二区在线观看不卡| 色一区在线观看| 精品国产91久久久久久久妲己| 国产精品国产三级国产a| 日韩国产精品久久久| 成人动漫一区二区三区| 在线91免费看| 国产精品久久久久天堂| 免费人成精品欧美精品| 成人国产亚洲欧美成人综合网 | 日韩精品91亚洲二区在线观看| 国产91精品在线观看| 欧美伦理影视网| 国产精品美女久久久久久久| 奇米一区二区三区| 91亚洲精品久久久蜜桃| 欧美tk—视频vk| 一区二区三区久久| 成人激情开心网| 精品久久久久一区| 日本不卡在线视频| 色999日韩国产欧美一区二区| 久久丝袜美腿综合| 美女任你摸久久| 欧美综合亚洲图片综合区| 国产精品美女一区二区三区 | 色av成人天堂桃色av| 久久久不卡网国产精品二区| 亚洲成人av福利| 91在线免费看| 国产精品久久久久久福利一牛影视 | 亚洲国产精品尤物yw在线观看| 成人性色生活片| 久久久久久久电影| 韩国成人精品a∨在线观看| 欧美日韩免费观看一区三区| 一区二区三区在线观看视频| 成人av资源站| 国产欧美一区二区三区鸳鸯浴 | 国产精品少妇自拍| 极品少妇一区二区三区精品视频| 欧美日韩国产一级二级| 一区二区三区精品视频在线| 99国产欧美久久久精品| 亚洲欧洲成人自拍| 成人av网站免费观看| 国产日韩欧美一区二区三区乱码 | 国产午夜精品久久久久久久 | 国产精品综合二区| 久久久久久久久久久久电影| 国产精品123| 国产精品久久久久久福利一牛影视| 国产成人综合在线|