MFC中注释含义

下面是 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 目录中

注意   \atlmfc\src\mfc 目录包含一个生成文件,该文件可与 NMAKE 一起使用以生成 MFC 库版本(包括浏览版本)。MFC 的浏览版本对于通过 MFC 调用结构本身进行跟踪非常有用。该目录中的 Readme.Txt 文件解释了如何使用此生成文件。

本文解释 MFC 用于注释每个类各部分的约定、这些注释的含义以及在每节中应该可以找到的内容。Visual C++ 向导对其创建的类使用类似的约定,您可能会发现这些约定对于您自己的代码很有用。

您可能已经熟悉 public、protected 和 private C++ 关键字。当查看 MFC 头文件时,您会发现每个类都可能具有上述每种关键字的几个。例如,公共成员变量和函数可能在多个 public 关键字之下。这是因为 MFC 基于成员变量和函数的使用而非允许的访问类型来分隔它们。MFC 对 private 的使用很保守;即使是被视为实现详细信息的项通常都受保护,但很多时候它们是公共的。尽管不鼓励访问实现详细信息,但 MFC 将决定权留给您。

在 MFC 源文件和“MFC 应用程序向导”创建的文件中,在类声明中都可以找到类似下面的注释(通常按此顺序):

// Constructors

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小鹏的专栏

tf API 研读3:Building Graphs

tensorflow是通过计算图的方式建立网络。 比喻说明: 结构:计算图建立的只是一个网络框架。编程时框架中不会出现任何的实际值,所有权重(weight)和偏...

27170
来自专栏chafezhou

fire让命令行接口更简单

15050
来自专栏黑泽君的专栏

传智播客_风清扬_2015年java基础深入浅出版_刘意老师

视频百度网盘下载链接:https://pan.baidu.com/s/1pLc7AvL#list/path=%2F

1.2K10
来自专栏deepcc

javascript 中的 delete

36780
来自专栏小狼的世界

Ruby学习笔记

Ruby语言中,以对象为基本单位,可以说所有的元素都是对象。按照之前对于面向对象程序的理解,对象是指包含了特定属性和方法集合的一组程序。对象由类来定义,具体的表...

9320
来自专栏做全栈攻城狮

电脑小白自学软件编程-.Net语法基础之循环语句,纯技巧干货

课程总目录:因头条无法自定义目录,大家关注:“做全栈攻城狮”微信公众号。回复“.net目录”,即可获取。微信公众号也包含大量学习教程,等你来~

16040
来自专栏智能大石头

深度解析C++拷贝构造函数

自2003年开始,断断续续用了12年C++,直到这两年做物联网嵌入式开发,感觉对C++的掌握仅有10%左右。 习惯了C#开发,C++倒显得难以下手!今天就一个函...

22790
来自专栏信数据得永生

JavaScript 编程精解 中文第三版 二、程序结构

435150
来自专栏web前端教室

js不好学并不是因为它难,而是因为它容易混淆

这段时间我主讲的前端零基础课,让我感觉js这东西是越来越简单了。你当然可以说我这是越讲课越熟。确实是有这部分因素,但更主要的是,我发现js中虽然有许多的概念各不...

28770
来自专栏喵了个咪的博客空间

zephir-(12)php函数和异常处理

#zephir-php函数和异常处理# ? ##前言## 先在这里感谢各位zephir开源技术提供者 经过了一个多月的学习,zephir的文档译文和基础讲解也将...

37360

扫码关注云+社区

领取腾讯云代金券