Страница 1 из 40 Описание стандартных классов Visual C++.
Класс CArchive позволяет сохранять на диске достаточно сложные объекты, а также загружать их в память по мере необходимости. Хранение объектов производится в файлах с последовательным доступом. Данный тип файла можно представить себе как двоичный поток данных. Подобно потокам, используемым в операциях ввода-вывода, архив использует буферизированную запись и чтение данных в память и из памяти. Поток ввода-вывода обрабатывает последовательности символов ASCII, но архив обрабатывает двоичные данные объектов в более эффективном формате, не использующем избыточности. Прежде, чем использовать объект класса архива, необходимо создать соответствующий ему объект класса CFile. При этом необходимо удостовериться, что в этих объектах соответствуют атрибуты доступа к данным. Одному объекту класса CFile может соответствовать не более одного активного объекта класса CArchive. При создании объекта класса CArchive он присоединяется к объекту класса CFile (или производного от него класса), соответствующего открытому файлу. При этом следует также определить режим работы с архивом: будет ли он использоваться для загрузки или сохранения данных. Объект класса CArchive может работать не только с простейшими типами данных, но также и объектами классов, производных от класса CObject, позволяющих сохранять свои данные в последовательном формате. Класс, допускающий сохранение своих данных в последовательном формате, обычно имеет функцию Serialize, а при его описании и реализации используются макросы DECLARE_SERIAL и IMPLEMENT_SERIAL. Перегруженные операторы чтения данных из архива (>>) и записи данных в архив (<<) обеспечивают удобный программный интерфейс работы с архивом. Аргументом данных операторов могут быть как переменные простейших типов, так и объекты классов, производных от класса CObject. Описание данного класса содержится в файле заголовка afx.h. operator >> friend CArchive& operator >>(CArchive& ar, CObject *& pOb); throw(CArchiveException, CFileException, CMemoryException); friend CArchive& operator >>(CArchive& ar, const CObject *& pOb); throw(CArchiveException, CFileException, CMemoryException); CArchive& operator >>(BYTE& by); throw(CArchiveException, CFileException); CArchive& operator >>(WORD& w); throw(CArchiveException, CFileException); CArchive& operator >>(int& i); throw(CArchiveException, CFileException); CArchive& operator >>(LONG& l); throw(CArchiveException, CFileException); CArchive& operator >>(DWORD& dw); throw(CArchiveException, CFileException); CArchive& operator >>(float& f); throw(CArchiveException, CFileException); CArchive& operator >>(double& d); throw(CArchiveException, CFileException); Возвращаемое значение Ссылка на объект класса CArchive, позволяющая использовать в одной строке программы несколько подобных операторов. Описание Читает указанный объект или переменную простейшего типа из архива. Если в файле реализации класса использовался макрос IMPLEMENT_SERIAL, то данный оператор вызывает защищенную функцию ReadObject с ненулевым указателем на объект класса, производного от класса CObject, который в свою очередь, вызывает функцию Serialize данного класса. operator << friend CArchive& operator <<(CArchive& ar, const CObject* pOb); throw(CArchiveException, CFileException); CArchive& operator <<(BYTE by); throw(CArchiveException, CFileException); CArchive& operator <<(WORD w); throw(CArchiveException, CFileException); CArchive& operator <<(int i); throw(CArchiveException, CFileException); CArchive& operator <<(LONG l); throw(CArchiveException, CFileException); CArchive& operator <<(DWORD dw); throw(CArchiveException, CFileException); CArchive& operator <<(float f); throw(CArchiveException, CFileException); CArchive& operator <<(double d); throw(CArchiveException, CFileException); Возвращаемое значение Ссылка на объект класса CArchive, позволяющая использовать в одной строке программы несколько подобных операторов. Описание Записывает указанный объект или переменную простейшего типа в архив. Если в файле реализации класса использовался макрос IMPLEMENT_SERIAL, то данный оператор вызывает защищенную функцию WriteObject с ненулевым указателем на объект класса, производного от класса CObject, который в свою очередь, вызывает функцию Serialize данного класса. CFile* GetFile() const; Возвращаемое значение Указатель на объект класса CFile, связанный с данным архивом. Описание Позволяет получить указатель на объект класса CFile, связанный с данным архивом. Перед использованием данной функции необходимо очистить буфер данного архива с использованием функции Flush. BOOL IsStoring() const; Возвращаемое значение Ненулевое, если архив в настоящее время используется для записи в него информации, и нулевое в противном случае. Описание Определяет режим использования архива. Данная функция используется в функции Serialize классов, поддерживающих работу с архивом. Если функция IsStoring возвращает ненулевое значение, то функция IsLoading возвращает нулевое значение. И наоборот. template< class TYPE, class ARG_TYPE > class CArray : public CObject Аргументы "sectiontableheader"TYPE - параметр шаблона, определяющий тип объектов, хранящихся в массиве. Объекты данного типа возвращаются функциями-членами класса CArray. "sectiontableheader"ARG_TYPE - параметр шаблона, определяющий тип, используемый для доступа к объектам, хранящиеся в массиве. Часто он представляет собой ссылку на значение параметра TYPE. Объекты данного типа используются в качестве аргументов функций-членов класса CArray. Описание Класс CArray служит для хранения информации в массивах, аналогичных массивам языка C, но допускает динамическое изменение их размера. Индекс первого элемента массива всегда равен 0. Пользователь может зафиксировать верхнюю границу массива или позволить ему расти при добавлении новых элементов, если их индекс превышает его верхнюю границу. Для данного массива всегда выделяется единая область памяти, даже в том случае, когда отдельные его элементы не используются. Как и в случае массивов языка C, время доступа к любому элементу массива CArray постоянно и не зависит от размера массива. Прежде чем использовать массив, необходимо вызвать функцию SetSize для установки его размера и резервирования необходимой памяти. Если при создании массива не использовалась функция SetSize, то при добавлении в него элементов часто будет производиться перераспределение памяти и копирование массива, что может привести к замедлению работы программы и к фрагментации памяти. При необходимости вывести диагностическую информацию об отдельном элементе массива, необходимо указать глубину объекта CDumpContext равной 1 или большей величине. Описание данного класса содержится в файле заголовка afxtempl.h. int Add(ARG_TYPE newElement); throw(CMemoryException); Возвращаемое значение Индекс вставленного элемента Аргументы "sectiontableheader"ARG_TYPE - параметр шаблона, определяющий тип аргументов, используемых для ссылки на элементы массива. "sectiontableheader"newElement - элемент, добавляемый в массив. Описание Добавляет новый элемент в конец массива, увеличивая его размер на 1. Если в функции SetSize аргумент nGrowBy имеет значение больше 1 и увеличение размера массива на 1 привело к выходу за пределы отведенной ему памяти, то для массива выделяется дополнительная память, в которую могут быть записаны новые элементы без новой операции выделения памяти, размер которой определяется аргументом nGrowBy функции SetSize. Однако максимальный индекс элемента в массиве возрастает только на 1. int GetSize() const; Возвращаемое значение Размер массива Описание Возвращает размер массива. Поскольку первый элемент массива имеет нулевой индекс, размер массива всегда на 1 превышает максимальный индекс элемента массива. |