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


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




 223 - AssertValid / MFC шаг за шагом / Visual C++

Шаг 223 - AssertValid

virtual void AssertValid( ) const;
Отладочная функция. С помощью нее проверяют объект на допустимость значения. Если значения в объекте не допустимые, то вызывается ошибка с номером, в которой указываются номер строки и имя файла, т.е. место совершения ошибки. Для того, чтобы проверить наш объект нам нужно эту функцию перегрузить, написав свой проверочный код. И при этом обычно вызвают одноименный метод базового класса.
#include "afxwin.h"
#include "iostream.h"

class CMyObject : public CObject
{
public:
    void AssertValid() const;
protected:
    DECLARE_DYNCREATE(CMyObject)
private:
	int x;
	int y;
};

IMPLEMENT_DYNCREATE(CMyObject,CObject);

void CMyObject::AssertValid() const
{
	CObject::AssertValid();
	ASSERT(x==100);
	ASSERT(y==100);
}

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

IMPLEMENT_SERIAL(CAlternativeObject,CObject,1);


void main()
{
CMyObject cm;
}

В данном примере мы создали функцию, которая будет проверять, чтобы данные в классе x и y были равны 100. Так как функция const, то изменить значения внутри нее нельзя. Можно только проверить. При этом как вы заметили я не вызывал исключения, а вызывая макрос ASSERT для проверки значений и это правильно. Самому вызывать исключения внутри этой функции нельзя. Проверять можно не только значения, но и указатели, например, если в классе есть ссылка на другие объекты, что эти ссылки действительны. Давайте вызовем ее сразу после создания объекта:

void main()
{
	CMyObject cm;
	cm.AssertValid();  
}
AssertValid - это отладочная функция и применять вы ее можете только в версии DEBUG, во всех остальных она просто изчезнет. Поэтому грамотно проверять конфигурацию компиляции и использовать эту функцию в режиме отладки. Вот так.
......
class CMyObject : public CObject
{
public:
	#ifdef _DEBUG
    void AssertValid() const;
	#endif
 
protected:
    DECLARE_DYNCREATE(CMyObject)
private:
	int x;
	int y;
};

IMPLEMENT_DYNCREATE(CMyObject,CObject);

#ifdef _DEBUG
void CMyObject::AssertValid() const
{
	CObject::AssertValid();
	ASSERT(x==100);
	ASSERT(y==100);
}
#endif

......
void main()
{
	CMyObject cm;
#ifdef _DEBUG
	cm.AssertValid();  
#endif
}

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