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 руб./мес


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




 217 - Проверка принадлежноcти классу IsKindOf / MFC шаг за шагом / Visual C++

Шаг 217 - Проверка принадлежноcти классу IsKindOf

Эта функция может определить какому классу принадлежит объект в памяти компьютера. То есть уже сужествующий. Для пользования этой функцией в определении класса должны в объявлении и реализации класса должны быть макроопределения.

DECLARE_DYNAMIC
IMPLEMENT_DYNAMIC

В противном случае при компиляции будут выдаваться ошибки типа:

E:\PROJECT\TestObject\TestObject.cpp(29) : error C2039: 'classCMyObject' : is not a member of 'CMyObject'
        E:\PROJECT\TestObject\TestObject.cpp(8) : see declaration of 'CMyObject'

Давайте посмотрим ее определение:

BOOL IsKindOf
( 
	const CRuntimeClass* pClass // Указатель на струтуру CRuntimeClass
)
 const;

Функция вернет ненулевое значение, если объект соотвествует классу или 0 при несоответствии. Давайте посмотрим пример.

// TestObject.cpp : Defines the entry point for the console application.
//

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

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

IMPLEMENT_DYNAMIC(CMyObject,CObject);

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

IMPLEMENT_DYNAMIC(CAlternativeObject,CObject);

void main()
{

CMyObject* myObj = new CMyObject; 

if (myObj->IsKindOf(RUNTIME_CLASS(CMyObject))) 
	cout << "CMyObject Test 1" << endl;
else 
	cout << "Not CMyObject Test 1" << endl; 

if (myObj->IsKindOf(RUNTIME_CLASS(CAlternativeObject))) 
	cout << "CMyObject Test 2" << endl;
else 
	cout << "Not CMyObject Test2" << endl;
}

Мы имеем два класса и с помошью функции IsKindOf проверяем какому классу принадлежит объект. Зачем это нужно ??? Ну, например, чтобы узнать есть ли нужная функция в классе. Вы скажете, что знаете, так как сами пишите программу. Представьте, что у Вас есть набор классов в массиве. Как вы разберетесь какой указатель на какой показывает ??? Ну естественно создадите в классе поле Identify. Чтобы этого не делать и реализована эта функция.


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