下面是 CStdioFile 類的部分列表,其中使用了 MFC 在其類中按類成員的用法劃分它們時所採用的大多數標準註釋: 程序員
class CStdioFile : public CFile { DECLARE_DYNAMIC(CStdioFile) public: // Constructors CStdioFile(); ... // Attributes FILE* m_pStream; // stdio FILE ... // Operations virtual void WriteString(LPCTSTR lpsz); ... virtual LPTSTR ReadString(LPTSTR lpsz, UINT nMax); ... // Implementation public: ... };
這些註釋以一致的方式標記包含類型類似的類成員的類聲明節。注意,這些註釋是 MFC 約定,不是固定規則。 安全
使用 MFC 源文件:函數
Microsoft 基礎類 (MFC) 庫提供了完整的源代碼。頭文件 (.h) 位於 \atlmfc\include 目錄中,而實現文件 (.cpp) 位於 \atlmfc\src\mfc 目錄中。spa
注意 \atlmfc\src\mfc 目錄包含一個生成文件,該文件可與 NMAKE 一塊兒使用以生成 MFC 庫版本(包括瀏覽版本)。MFC 的瀏覽版本對於經過 MFC 調用結構自己進行跟蹤很是有用。該目錄中的 Readme.Txt 文件解釋瞭如何使用今生成文件。code
本文解釋 MFC 用於註釋每一個類各部分的約定、這些註釋的含義以及在每節中應該能夠找到的內容。Visual C++ 嚮導對其建立的類使用相似的約定,您可能會發現這些約定對於您本身的代碼頗有用。對象
您可能已經熟悉 public、protected 和 private C++ 關鍵字。當查看 MFC 頭文件時,您會發現每一個類均可能具備上述每種關鍵字的幾個。例如,公共成員變量和函數可能在多個 public 關鍵字之下。這是由於 MFC 基於成員變量和函數的使用而非容許的訪問類型來分隔它們。MFC 對 private 的使用很保守;即便是被視爲實現詳細信息的項一般都受保護,但不少時候它們是公共的。儘管不鼓勵訪問實現詳細信息,但 MFC 將決定權留給您。blog
在 MFC 源文件和「MFC 應用程序嚮導」建立的文件中,在類聲明中均可以找到相似下面的註釋(一般按此順序):事件
// Constructorsit
// Attributes自動化
// Operations
// Overridables
// Implementation
// Implementation /implimen'teiʃən/ n實現
// Implementation 節是任何 MFC 類聲明中最重要的部分。
此節包括全部的實現詳細信息。成員變量和成員函數均可以出如今此節中。在未來的 MFC 版本中,該行下面的全部內容均可能更改。不該依賴 // Implementation 行下的詳細信息,除非只能這樣作。另外,未記錄在實現行下聲明的成員,但在技術說明中討論了某些實現。不管基類中的虛函數是在哪一節中定義的,該基類函數的重寫都包括在本節中,由於函數重寫基類實現這一事實被視爲實現詳細信息。這些成員一般是受保護的,但並不是老是如此。
從註釋示例下的 CStdioFile 列表中能夠看到,在 // Implementation 註釋下面聲明的成員可聲明爲 public、protected 或 private。但使用這些成員時應謹慎,由於它們未來可能更改。將一組成員聲明爲 public 對使類庫實現正常工做可能有必要。但這並不意味着能夠安全地使用這樣聲明的成員。
注意 在 // Implementation 註釋的上方或下方能夠找到其他類型的註釋。不管出如今上方仍是下方,這些註釋都描述在它們下面聲明的成員類型。若是它們出如今 // Implementation 註釋下方,則應假定這些成員在未來的 MFC 版本中可能更改。
// Attributes屬性,特性,特質
MFC 類聲明中的 // Attributes 節包含對象的公共特性(或屬性)。這些特性或屬性一般是成員變量或 Get/Set 函數。「Get」和「Set」函數能夠是虛擬的,也能夠不是虛擬的。「Get」函數通常爲 const,由於大多數狀況下它們都沒有反作用。這些成員一般是公共的;受保護的屬性和私有屬性一般在實現節中。
在註釋示例下,CStdioFile 類的示例列表中包含一個成員變量 m_pStream。CDC 類在此註釋下列出近 20 個成員。
注意 大類(如 CDC 和 CWnd)的成員可能很是多,若只是在一組中列出全部屬性,對清楚地描述成員並無多大幫助。在這種狀況下,類庫使用標頭形式的其餘註釋來進一步描述成員。例如,CDC 使用 // Device-Context Functions、// Drawing Tool Functions、// Drawing Attribute Functions 等等。表示屬性的組將遵循上述普通語法。許多 OLE 類都有一個稱爲 // Interface Maps 的實現節。
// Operations 註釋
MFC 類聲明中的 // Operations 節包含成員函數;能夠在對象上調用這些函數,以使該對象執行任務或執行操做。這些函數通常是非 const 的,由於它們一般有反作用。它們能夠是虛擬的,也能夠不是虛擬的,具體取決於類的須要。這些成員一般是公共的。
在註釋示例中的 CStdioFile 類的示例列表中,此註釋下包括兩個成員函數:ReadString 和 WriteString。
與屬性同樣,操做也能夠進一步細分。
// Constructors 註釋
MFC 類聲明中的 // Constructors 節聲明構造函數(從 C++ 的角度)以及實際使用對象所需的任何初始化函數。例如,CWnd::Create 位於構造函數節中,由於在使用 CWnd 對象以前,必須首先調用 C++ 構造函數,而後調用 Create 函數來「完整構造」它。這些成員一般是公共的。
例如,CStdioFile 類有三個構造函數,其中一個顯示在註釋示例下的列表中。
// Overridables 註釋
MFC 類聲明中的 // Overridables 節包含虛函數;當您須要修改基類行爲時,能夠在派生類中重寫這些函數。虛函數的名稱一般以「On」開頭,但 On 不是絕對須要的。此處的函數旨在被重寫,而且常實現或提供某種類型的「回調」或「掛鉤」。這些成員一般是受保護的。
在 MFC 自己中,純虛函數老是放在此節中。C++ 中的純虛函數是下面這樣的形式:
virtual void OnDraw( ) = 0;
在註釋示例中的 CStdioFile 類的示例列表中不包括任何可重寫節。另外一方面,CDocument 類列出了大約 10 個可重寫的成員函數。
在某些類中還能夠看到註釋 // Advanced Overridables。這些是隻有高級程序員才應嘗試重寫的函數。您可能永遠不須要重寫它們。
注意 本文描述的約定一般也適用於自動化(之前稱爲 OLE 自動化)方法和屬性。自動化方法相似於 MFC 操做。自動化屬性相似於 MFC 特性。自動化事件(支持 ActiveX 控件,之前稱爲 OLE 控件)相似於 MFC 可重寫的成員函數。