Посмотрите иерархию классов MFC и Вы увидите, что очень много объектов порождено от CObject. Так как он находится в самом верху иерархии классов, то естественно он обеспечивает только самые базовые возможности для объекта. К базовым возможностям относятся вот какие:
Всего функций в классе немного вот они:
// --------------- Конструктора объекта CObject( ); // Конструктор по умолчанию CObject( constCObject& objectSrc ); // Конструктор копий void* operator new( size_t nSize ); // Оператор создания объекта throw( CMemoryException ); void* operator new( size_t nSize, LPCSTR lpszFileName, int nLine ); // Второй вариант создания объекта throw( CMemoryException ); void operator delete( void* p ); // Оператор удаления объекта void operator =( const CObject& src );// Оператор получения копии // -------------- Диагностика virtual void AssertValid( ) const; // Проверка состояния объекта virtual void Dump( CDumpContext& dc ) const; // Получения информации об объекте // -------------- Сохранение обьекта BOOL IsSerializable( ) const; // Проверка возможности сохранения объекта virtual void Serialize( CArchive& ar );// Сохранение объекта throw( CMemoryException ); throw( CArchiveException ); throw( CFileException ); //--------------- Дополнительные функции virtual CRuntimeClass* GetRuntimeClass( ) const; // Возвращает информацию о классе BOOL IsKindOf( const CRuntimeClass* pClass ) const; // Проверка получен ли объект из данного класса
Как видите в классе CObject собраны только функции, которые отвечают за существование объекта и больше ничего. Сами смотрите. Можно создать, сохранить, восстановить, сделать копию, проверить состоянии и все. Это каркас, который умеет существовать в компьютерной системе, и на который надо добавлять свои функции. При этом этот каркас приспособлен под жизнь вместе с MFC. Вы как программист обычно применяете наследования, чтобы добавить к этому классу функциональности. Давайте будем постепенно проводить наследование. Вот самый простой вариант.
#include "stdafx.h" #include "afxwin.h" #include "iostream.h" class CMyObject : public CObject { }; void main() { CMyObject* myObj = new CMyObject; }
Мы класс CMyObject как потомок от CObject. Но наш класс пока ничего не умеет. Он просто появляется в программе. Дело в том несмотря ни на что он еще мертвый. Все функции, которые определены в нем виртуальные. У них нет реализации. Вот пример кода из Afx.Inp:
...... _AFX_INLINE void CObject::AssertValid() const { /* no asserts in release builds */ } _AFX_INLINE void CObject::Dump(CDumpContext&) const { /* no dumping in release builds */ } ......
Нам надо оживить его. Функция за функцией для того, чтобы он смог жить в мире MFC. На вопрос с чем связано отсутствие реализаций функций прост. Дело в том, что класс абсолютно абстрактный, так как не имеет данных. Чего сохранять ??? Чего проверять ???? Нечего. Это просто шаблон, который говорит Вам, что надо делать так.