Страница 17 из 40 int GetUpperBound() const; Возвращаемое значение Максимальный индекс элемента массива. Если возвращаемое значение равно -1, то данный массив не содержит элементов. Описание Возвращает максимальный индекс элемента массива. Поскольку первый элемент массива имеет нулевой индекс, максимальный индекс элемента массива всегда на 1 меньше, чем размер массива. Идентичная функция имеется в классах CByteArray, CDWordArray, CPtrArray, CStringArray, CUIntArray и CWordArray. operator [ ] CObject*& operator [](int nIndex); CObject* operator [](int nIndex) const; Описание Эти операторы могут использоваться вместо функций SetAt и GetAt. Первый оператор используется для обычных массивов и может вызываться как с левой, так и с правой стороны от оператора присваивания. Второй оператор используется для массивов констант и может вызываться только с правой стороны оператора присваивания. В отладочной версии библиотеки производится проверка того, что используемый индекс массива находится в разрешенном диапазоне значений. Соответствующие операторы, отличающиеся только типом своих возвращаемых значений, имеются в классах CByteArray, CDWordArray, CPtrArray, CStringArray, CUIntArray и CWordArray. void RemoveAll(); Описание Удаляет все указатели из массива, но не уничтожает сами объекты класса CObject. Если массив уже пуст, функция все равно работает. Функция RemoveAll освобождает всю память, используемую для хранения указателей. Идентичная функция имеется в классах CByteArray, CDWordArray, CPtrArray, CStringArray, CUIntArray и CWordArray. void SetSize(int nNewSize, int nGrowBy = -1); throw(CMemoryException); Аргументы "sectiontableheader"nNewSize - новый размер массива (количество элементов). Должен иметь значение большее или равное 0. "sectiontableheader"nGrowBy - минимальное количество элементов, на которое будет увеличен размер массива при необходимости. Описание Устанавливает размер пустого или существующего массива. Выделяет память в случае необходимости. Если новый размер массива меньше его прежнего размера, то массив усекается и вся неиспользуемая память освобождается. Для повышения производительности приложений, использующих массив, необходимо вызвать функцию SetSize до начала работы с ним. Правильный выбор ее аргументов позволит исключить или существенно уменьшить объем операций по перераспределению памяти и копирования массива при добавлении к нему элементов. Аргумент nGrowBy влияет только на распределение памяти при увеличении размеров массива. Его значение никак не отражается на возвращаемых значениях функций GetSize и GetUpperBound. Идентичная функция имеется в классах CByteArray, CDWordArray, CPtrArray, CStringArray, CUIntArray и CWordArray. Класс CObject является одним из основных классов Microsoft Foundation Class Library. Он является базовым классом не только для классов библиотек, таких как CFile и CObList, но и для многих пользовательских классов. Использование класса CObject позволяет: "sectiontableheader"работать с архивами; "sectiontableheader"создавать классы в процессе выполнения приложения; "sectiontableheader"производить диагностику объектов; "sectiontableheader"обеспечивать совместимость с классами коллекций. Класс CObject не поддерживает множественное наследование. Создаваемые на его основе классы могут иметь в качестве базового класса только класс CObject, и этот класс должен быть самым старшим в иерархии. Для того чтобы воспользоваться всеми возможностями, предоставляемыми классом CObject необходимо использовать специальные макросы при объявлении и реализации производных от него классов. Макросами первого уровня являются DECLARE_DYNAMIC и IMPLEMENT_DYNAMIC, обеспечивающие доступ к имени класса и его положению в иерархии в процессе выполнения приложения. Это, в свою очередь, позволяет создавать осмысленные диагностические сообщения. Макросами второго уровня являются DECLARE_SERIAL и IMPLEMENT_SERIAL, обладающие всеми возможностями макросов первого уровня, но обеспечивающие возможность работы с архивами. Описание данного класса содержится в файле заголовка afx.h. Функции данного класса используются во всех демонстрационных приложениях, приведенных в данной книге. virtual void AssertValid() const; Описание Функция CObject::AssertValid служит для целей отладки и производит проверку данного объекта на допустимость значений хранимых в нем величин. В отладочной версии библиотеки данная функция может посредством вызова исключения прервать выполнение программы и вывести сообщение, в котором будет указано имя файла программы и номер строки, из которой было вызвано исключение. При написании пользовательского класса необходимо перегрузить функцию AssertValid и поместить в ней необходимые проверки на допустимость значений хранящихся в объекте величин. Обычно, первым оператором перегруженной функции AssertValid является вызов соответствующей функции базового класса. Поскольку функция AssertValid является функцией-константой, пользователь не может изменять значения величин в проверяемом объекте. Перегруженная версия данной функции не должна сама вызывать исключения, а должна только сообщать, допустима ли данная комбинация параметров в объекте класса или нет. Понятие допустимости зависит от самого класса. Как правило, осуществляется только "поверхностная проверка". Так, например, если класс содержит указатели на другие объекты, то проверяется только тот факт, что эти указатели не нулевые, но не проверяется допустимость объектов, на которые они указывают. virtual void Dump(CDumpContext& dc) const; Аргументы "sectiontableheader"dc - объект класса, осуществляющего потоковый вывод отладочной информации. Обычно это используемый по умолчанию объект afxDump. Описание Передает содержимое пользовательского объекта в объект класса CDumpContext. При создании пользовательского класса необходимо перегрузить функцию Dump, чтобы обеспечить выдачу диагностических сообщений об ошибках, произошедших в объекте данного класса. Обычно, первым оператором перегруженной функции является вызов соответствующей функции базового класса. Функция CObject::Dump печатает имя класса, если при его создании использовались макросы IMPLEMENT_DYNAMIC или IMPLEMENT_SERIAL. При выводе пользовательской информации перегруженная функция Dump не должна использовать символа перевода каретки в конце своей работы. Данная функция работает только в отладочной версии библиотеки MFC и ее описание должно располагаться между операторами условной трансляции #ifdef _DEBUG и #endif. Поскольку функция Dump является функцией-константой, пользователь не может изменять значения величин в проверяемом объекте. Функция Dump вызывается перегруженным оператором записи объекта CDumpContext::operator << при записи указателя на объект класса CObject. Функция Dump не предполагает рекуррентности, то есть пользователь может распечатать список объектов, но если один из объектов сам является списком, то его содержимое не будет распечатано. virtual void Serialize(CArchive& ar); throw(CMemoryException); throw(CArchiveException); throw(CFileException); Аргументы "sectiontableheader"ar - объект класса CArchive осуществляющий чтение и запись объекта на диске. Описание Читает объект с диска и записывает его на диск в с использованием объекта класса архива. Данная функция должна быть перегружена в каждом производном классе, предполагающем работу с архивом. Первым оператором перегруженной функции должен быть вызов функции Serialize базового класса. Для того, чтобы иметь возможность использовать данную функцию в своем классе, при его описании в файле заголовка должен быть использован макрос DECLARE_SERIAL, а в его файле реализации - макрос IMPLEMENT_SERIAL. Для того, чтобы определить, какая операция производится в данном случае, используются функции CArchive::IsLoading и CArchive::IsStoring. Функция Serialize вызывается функциями CArchive::ReadObject и CArchive::WriteObject, которые, в свою очередь, вызываются переопределенными операторами CArchive::operator << и CArchive::operator >>, первый из которых производит запись объекта в архив, а второй - извлечение объекта из архива. Класс CPrintInfo используется для хранения информации о текущем задании принтера. Приложение создает объект класса CPrintInfo при выборе команд меню File|Print (Файл|Печать) или File|Print Preview (Файл|Предварительный просмотр) и уничтожает его при завершении выполнения этих команд. Объект класса CPrintInfo содержит информацию, касающуюся как всего процесса печати, например, диапазон печатаемых страниц, так и статус текущего задания, например, номер печатаемой страницы. Некоторая информация, касающаяся процесса печати, хранится, также, в связанном с данным объектом класса CPrintInfo объекте класса CPrintDialog, хранящем информацию об установках пользователя в диалоговом окне Печать. Объект класса CPrintInfo передается приложением в объект пользовательского класса представления и служит для обмена информацией между этими классами. Например, приложение передает объекту класса представления номер текущей печатаемой страницы в переменной данного класса m_nCurPage. Объект класса представления использует данную величину для определения того, какую страницу следует печатать. Другим примером использования объекта класса CPrintInfo является случай, когда размер документа не известен заранее и должен быть определен в процессе печати. В этом случае по достижении конца документа объект класса представления присваивает переменной m_bContinuePrinting, являющейся членом класса CPrintInfo, значение FALSE, тем самым информируя приложение о завершении процесса печати. Класс CPrintInfo не имеет базового класса. Описание данного класса содержится в файле заголовка afxext.h. |