C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 216 - DECLARE_DYNAMIC и IMPLEMENT_DYNAMIC / MFC шаг за шагом / Visual C++

Шаг 216 - DECLARE_DYNAMIC и IMPLEMENT_DYNAMIC

Объявление данных макросов в классе позволяет обратиться к информации о классе во время выполнения. То есть эти макросы просто дают возможность во время работы программы иметь информацию о типе класса. Вот их описание:

DECLARE_DYNAMIC( имя класса )
IMPLEMENT_DYNAMIC(имя класса, имя класса родителя )
// Имя класса фактическое не заключенного в кавычки.
DECLARE_DYNAMIC в описании класса IMPLEMENT_DYNAMIC в реализации. IMPLEMENT_DYNAMIC заменяется на код C++ для получения информации времени выполнения. Если вы объявили эти макросы для класса, то можете обращаться к функции IsKindOf и макрокоманде RUNTIME_CLASS. Вот выдержки из исходного кода по определению этих макросов.
#define IMPLEMENT_DYNAMIC(class_name, base_class_name) \
	IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF, NULL)

#define _IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, wSchema, pfnNew) \
	AFX_DATADEF CRuntimeClass class_name::class##class_name = { \
		#class_name, sizeof(class class_name), wSchema, pfnNew, \
			RUNTIME_CLASS(base_class_name), NULL }; \
	CRuntimeClass* class_name::GetRuntimeClass() const \
		{ return RUNTIME_CLASS(class_name); } \

Если не эти макросы, то Вам пришлось бы все это писать. Можете и сами писать. Но лучше уж макроопредления. Может с их реализацией мы подробнее когда-нибудь разберемся.

Давайте организуем поддержку информации о классе во время выполнения программы для нашего класса.

#include "stdafx.h"
#include "afxwin.h"
#include "iostream.h"

class CMyObject : public CObject
{
protected:
	DECLARE_DYNAMIC(CMyObject)
};

IMPLEMENT_DYNAMIC(CMyObject,CObject);

void main()
{
	CMyObject* myObj = new CMyObject; 
}

| |
Автор Каев Артем.
[AD]