Шаг 230 - Функции GetDepth и SetDepth класса CDumpContext

Эти две функции получают и устанавливают число, которое характеризует глубину дампа.

int GetDepth( ) const;
void SetDepth( int nNewDepth );
// nNewDepth новая глубина дампа

Я немного отвлекусь и скажу, что операции << работают только при динамической компоновке приложения MFC. Вы должны выбрать USE MFC as shared DLL.

Обычно данные функции применяют для массивов объектов, чтобы в процессе отладки можно было просмотреть содержание всех переменных. Вот так-то можно сделать.

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

class CAge : public CObject
{
public:
	CAge(int x);
	CAge();
	#ifdef _DEBUG
		void Dump(CDumpContext& dc) const;
	#endif
protected:
    DECLARE_DUCREATE(CAge);
private:
	int xx;
};

CAge::CAge(int x)
{xx=x;}

CAge::CAge()
{ xx=0; }

IMPLEMENT_DUNCREATE(CAge,CObject);

#ifdef _DEBUG
	void CAge::Dump( CDumpContext& dc ) const
	{
		CObject::Dump(dc);
		dc << xx;
	}
#endif

void main()
{
   CObArray array;
   array.Add( new CAge( 21 ) ); 
   array.Add( new CAge( 40 ) ); 
   #ifdef _DEBUG
   	   afxDump.SetDepth(0); 
	   afxDump << array;
	   afxDump << "---------\n";
	   afxDump.SetDepth(1);
	   afxDump << array;
   #endif
   delete array.GetAt(0) ; 
   delete array.GetAt(1); 
}

Вот какие результаты в зависимости от установки SetDepth.

a CObArray at $64FDC8
with 2 elements
--------- // SetDepth(1) !!!!
a CObArray at $64FDC8
with 2 elements
 [0] = a CObject at $770D10
21
 [1] = a CObject at $7707A0
40

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 21.08.2000