下面是 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 可重写的成员函数。