Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Замечание
Библиотека классов Microsoft Foundation (MFC) продолжает поддерживаться. Однако мы больше не добавляем функции или обновляем документацию.
Библиотека классов Microsoft Foundation (MFC) предоставляет полный исходный код. Файлы заголовков (.h) находятся в каталоге \atlmfc\include . Файлы реализации (.cpp) находятся в каталоге \atlmfc\src\mfc .
В этой статье описываются соглашения, которые MFC использует для комментариев различных частей каждого класса, значения этих комментариев и того, что следует ожидать в каждом разделе. Мастера Visual Studio используют аналогичные соглашения для классов, которые они создают для вас, и вы, вероятно, найдете эти соглашения, полезные для собственного кода.
Вы, возможно, знакомы с ключевыми словами public, protected и private C++. В файлах заголовков MFC каждый класс может иметь несколько из них. Например, переменные и функции общедоступных членов могут находиться в нескольких ключевых public словах. Это связано с тем, что MFC разделяет переменные-члены и функции на основе их использования, а не по типу разрешенного доступа. MFC использует private умеренно. Даже элементы, которые считаются protectedподробностями реализации, часто publicи многократно встречаются. Хотя доступ к деталям реализации не рекомендуется, MFC оставляет вам решение.
Как в исходных файлах MFC, так и в файлах заголовков, создаваемых мастером приложений MFC, вы найдете такие комментарии в объявлениях классов (обычно в этом порядке):
// Constructors
// Attributes
// Operations
// Overridables
// Implementation
Пример комментариев
Следующий частичный список классов CStdioFile использует большинство стандартных комментариев, которые MFC использует в своих классах для разделения членов класса по способам их использования:
/*============================================================================*/
// STDIO file implementation
class CStdioFile : public CFile
{
DECLARE_DYNAMIC(CStdioFile)
public:
// Constructors
CStdioFile();
// . . .
// Attributes
FILE* m_pStream; // stdio FILE
// m_hFile from base class is _fileno(m_pStream)
// Operations
// reading and writing strings
virtual void WriteString(LPCTSTR lpsz);
virtual LPTSTR ReadString(_Out_writes_z_(nMax) LPTSTR lpsz, _In_ UINT nMax);
virtual BOOL ReadString(CString& rString);
// Implementation
public:
virtual ~CStdioFile();
#ifdef _DEBUG
void Dump(CDumpContext& dc) const;
#endif
virtual ULONGLONG GetPosition() const;
virtual ULONGLONG GetLength() const;
virtual BOOL Open(LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError = NULL);
// . . .
protected:
void CommonBaseInit(FILE* pOpenStream, CAtlTransactionManager* pTM);
void CommonInit(LPCTSTR lpszFileName, UINT nOpenFlags, CAtlTransactionManager* pTM);
};
Эти комментарии последовательно помечают разделы объявления класса, содержащие аналогичные виды членов класса. Помните, что это условности MFC, а не установленные правила.
Комментарий конструкторов
Раздел // Constructors объявления класса MFC объявляет конструкторы (в смысле C++) и любые функции инициализации, необходимые для действительного использования объекта. Например, CWnd::Create находится в разделе конструкторов, так как перед использованием объекта CWnd, он должен быть полностью построен, сначала вызвав конструктор C++, а затем вызвав функцию Create. Как правило, эти члены общедоступны.
Например, класс CStdioFile имеет пять конструкторов, один из которых показан в списке в разделе "Пример комментариев".
Комментарий атрибутов
Раздел // Attributes объявления класса MFC содержит общедоступные атрибуты (или свойства) объекта. Обычно атрибуты являются переменными-членами или функциями 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 содержатся функции-члены, которые можно вызывать на объекте для выполнения действий или операций. Обычно эти функции не являются побочнымиconst эффектами, так как они обычно имеют побочные эффекты. Они могут быть виртуальными или невиртуальными в зависимости от потребностей класса. Как правило, эти члены общедоступны.
В примере перечисления из класса CStdioFile в Пример комментариев, список включает три функции-члена под этим комментарием: WriteString и две перегрузки ReadString.
Как и атрибуты, операции можно разделить более подробно.
Переопределимые комментарии
Раздел // Overridables объявления класса MFC содержит виртуальные функции, которые можно переопределить в производном классе, когда необходимо изменить поведение базового класса. Обычно их название начинается с "Вкл.", хотя в этом нет строгой необходимости. Функции здесь предназначены для переопределения, а также часто реализуют или предоставляют какой-то "обратный вызов" или "перехватчик". Как правило, эти члены защищены.
В самом MFC чистые виртуальные функции всегда помещаются в этот раздел. Чистая виртуальная функция в C++ принимает форму:
virtual void OnDraw( ) = 0;
В примере перечисления из класса CStdioFile, в примечаниях, список не содержит раздел переопределяемых элементов. С другой стороны, класс CDocumentперечисляет примерно 10 переопределиемых функций-членов.
В некоторых классах также может отображаться комментарий // Advanced Overridables. Эти функции должны пытаться переопределить только опытные программисты. Вам, скорее всего, никогда не придется переопределять их.
Замечание
Соглашения, описанные в этой статье, как правило, также хорошо работают для методов и свойств автоматизации (ранее известных как OLE Automation). Методы автоматизации похожи на операции MFC. Свойства автоматизации похожи на атрибуты MFC. События автоматизации, поддерживаемые элементами управления ActiveX (ранее известными как элементы управления OLE), похожи на переопределяемые функции-члены MFC.
Комментарий о реализации
Раздел // Implementation является самой важной частью любого объявления класса MFC.
В этом разделе содержатся все сведения о реализации. Переменные-члены и функции-члены могут отображаться в этом разделе. Все ниже этой строки может измениться в будущем выпуске MFC. Если вы не можете избежать этого, вы не должны полагаться на сведения под строкой // Implementation . Кроме того, члены, объявленные под строкой реализации, являются незадокументированы, хотя некоторые реализации рассматриваются в технических заметках. Переопределения виртуальных функций в базовом классе находятся в этом разделе, независимо от того, в каком разделе определена функция базового класса. Когда функция переопределяет реализацию базового класса, это считается деталью реализации. Как правило, эти члены защищены, но не всегда.
В списке CStdioFile в разделе "Пример комментариев" участники, объявленные под // Implementation комментарием, могут быть объявлены как public, protectedили private. Эти элементы следует использовать только с осторожностью, так как они могут измениться в будущем. Объявление группы членов как public может потребоваться для правильной работы реализации библиотеки классов. Тем не менее, это не означает, что вы можете безопасно использовать объявленные таким образом члены.
Замечание
Вы можете найти комментарии оставшихся типов выше или ниже // Implementation комментария. В любом случае они описывают типы членов, которые объявлены под ними. Если они находятся под // Implementation комментарием, можно предположить, что элементы могут измениться в будущих версиях MFC.