Автор работы: Пользователь скрыл имя, 13 Апреля 2013 в 10:28, реферат
Кроме того, имеется возможность получать целую иерархию производных типов данных из указателей, массивов, структур и объединений. Выражения формируются из операторов и операндов. Любое выражение, включая присваивание и вызов функции, может быть инструкцией. Указатели обеспечивают машинно-независимую адресную арифметику. Си, как и любой другой язык программирования, не свободен от недостатков. Уровень старшинства некоторых операторов не является общепринятым, некоторые синтаксические конструкции могли бы быть лучше. Тем не менее, как оказалось, Си - чрезвычайно эффективный и выразительный язык, пригодный для широкого класса задач.
Введение 3
1.Класс CString 4
2.Класс CTime и CTimeSpan 7
3.Класс COleDateTime 10
4.Классы файлов MFC 11
5.Класс CArchive 14
6.Коллекции объектов MFC 18
7.Обработка исключительных ситуаций 21
Заключение 26
Использованная литература 27
Министерство образования Российской Федерации
Южно-Уральский
Приборостроительный факультет
Кафедра автоматики и управления
Реферат на тему:
«Классы общего назначения в языке Си»
Выполнила:
Кулиненко Е. Е.
ПС-145
Проверил:
Касюк С.Т.
Содержание
Введение 3
1.Класс CString 4
2.Класс CTime и CTimeSpan 7
3.Класс COleDateTime 10
4.Классы файлов MFC 11
5.Класс CArchive 14
6.Коллекции объектов MFC 18
7.Обработка исключительных ситуаций 21
Заключение 26
Использованная литература 27
Введение
Си - универсальный язык программирования. Си обеспечивает разнообразие типов данных. Базовыми типами являются символы, а также целые и числа с плавающей точкой различных размеров. Кроме того, имеется возможность получать целую иерархию производных типов данных из указателей, массивов, структур и объединений. Выражения формируются из операторов и операндов. Любое выражение, включая присваивание и вызов функции, может быть инструкцией. Указатели обеспечивают машинно-независимую адресную арифметику. Си, как и любой другой язык программирования, не свободен от недостатков. Уровень старшинства некоторых операторов не является общепринятым, некоторые синтаксические конструкции могли бы быть лучше. Тем не менее, как оказалось, Си - чрезвычайно эффективный и выразительный язык, пригодный для широкого класса задач.
В языке Си существует несколько классов общего назначения, о которых и пойдет речь. В данной работе рассматриваются классы CString, CTime, CTimeSpan, ColeDateTime, классы файлов MFC, класс CArchive, коллекции объектов MFC и обработка исключительных ситуаций.
1. Класс CString
Класс CString - текстовые строки
Практически ни одно приложение не обходится без использования текстовых строк. Язык Си и Си++ не имеет специального строкового типа. Обычно для хранения строк используют массивы символов. MFC предоставляет программисту более удобное средство для организации и работы со строками. Для этого предназначен специальный класс CString.
Строки CString XE "CString" состоят из символов, типа TCHAR XE "TCHAR" . Тип TCHAR определяется по разному в зависимости от того, определен или нет символ _UNICODE XE "_UNICODE" . Если символ _UNICODE не определен, TCHAR соответствует обычному типу char. В противном случае он представляет символы, определяемые двумя байтами.
При использовании класса CString отпадает необходимость постоянно следить за тем, чтобы длина строки не превысила объем выделенной для нее памяти. Строки CString XE "CString" автоматически расширяются и сокращаются в зависимости от фактической длины строки.
В класс CString входят методы, выполняющие все основные операции над строками - копирование, сравнение, присваивание и т. д. Над объектами класса CString определены такие операции как +, -, облегчающие работу со строками. Строки, представленные объектами CString, можно сравнивать, используя обычные операторы сравнения <, >, <=, >=, ==. Объекты класса CString можно записывать на диск - для них работает механизм сохранения и восстановления объектов класса. Фактически вы можете работать со стоками как с другими простыми типами данных.
Строки CString можно использовать совместно с строками языка Си (массивами символов, заканчивающихся знаком двоичного нуля). Вы можете обращаться к объектам класса CString как к обычным массивам символов, то есть использовать их как строки символов языка Си. Вы можете указывать строки в качестве параметра функций и методов, которые принимают параметры типа const char* или LPCTSTR.
Класс CString содержит большое количество различных методов, предназначенных для работы со строками. Среди них есть методы для доступа к отдельным элементам строки, сравнения строк между собой, поиска подстрок, сохранения строк в файле и их последующего восстановления. Мы оставляем класс CString для вашего самостоятельного изучения и ограничимся описанием только самых основным методов.
Конструктор класса
Класс CString имеет несколько различных конструкторов, позволяющих создавать строки на основе различных данных.
Конструктор класса CString, используемый по умолчанию, не имеет параметров. Он создает пустую строку. В последствии вы можете записать в нее любой текст.
CString();
Для класса CString определен конструктор копирования. Он позволяет создать строку на основе другой, ранее определенной строки. Этот и все остальные конструкторы могут вызвать исключение CMemoryException XE "CMemoryException" , если для создания строки недостаточно оперативной памяти.
CString(const CString& stringSrc);
throw(CMemoryException);
Конструктор, представленный ниже, позволяет создать строку из nRepeat символов ch. Параметр nRepeat можно не указывать. В этом случае строка будет содержать единственный символ ch.
CString(TCHAR ch, int nRepeat = 1);
throw(CMemoryException);
Вы можете создать новую строку и скопировать в нее nLength символов из массива lpch. Строка, расположенная в массиве lpch, может не иметь завершающего двоичного нуля. Для этого используйте следующий указатель:
CString(LPCTSTR lpch, int nLength);
throw(CMemoryException);
Новую строку можно создать и скопировать в нее данные из массива символов, закрытого двоичным нулем. В этом случае количество символов, которые будут записаны в новую строку не указывается. Копируются все символы до двоичного нуля.
Для создания строки вы можете воспользоваться одним из трех конструкторов, представленных ниже. Как видите, конструкторы отличаются только типом параметра:
CString(const unsigned char* psz);
throw(CMemoryException);
CString(LPCWSTR lpsz);
throw(CMemoryException);
CString(LPCSTR lpsz);
throw(CMemoryException);
2. Класс CTime и CTimeSpan
CTime не имеет базового класса.
Объект CTime представляет
абсолютное время и дату. Класс CTime
объединяет тип данных ANSI time_t и ассоциированные
run-time функции (функции периода выполнения),
включая способность
Значение CTime базируется на UTC (coordinated universal time -универсальные координаты времени), которые эквивалентны GMT (Greenwich mean time - значение времени по Гринвичу). Местная временная зона контролируется переменной среды окружения - TZ.
При создании CТime установите
параметр nDST равным 0 для сообщения
что действует стандартное
Для получения более подробной информации о типе данных time_t и run-time функциях, которые использует CTime смотри Run-Time Library Reference.
Дружественный класс CTimeSpan, представляет промежуток времени - разницу между двумя объектами CTime.
Классы CTime и CTimeSpan не предназначены для наследования, так как они не имеют виртуальных функций. Размер объектов CTime и CTimeSpan обычно - 4 байта. Большинство функций-членов - встроенные (inline).
Для получения более подробной информации смотри статью Date and Time в Visual C++ Programmer's Guide и Time Management в Run-Time Library Reference.
Члены класса CTime
КонструкторыCTime Различные конструкторы объекта CТime.
GetCurrentTime Создание объекта CTime содержащего текущее время (статическая член-функция).
Методы доступа GetTime Возвращает time_t соответствующее объекту CТime.
GetYear Возвращает год, который содержит данный объект CTime.
GetMonth Возвращает месяц, который содержит данный объект CTime. (от 1 до 12).
GetDay Возвращает день, который содержит данный объект CTime. (от 1 до 31).
GetHour Возвращает час, который содержит данный объект CTime. (от 0 до 23).
GetMinute Возвращает минуты, которые содержит данный объект CTime. (от 0 до 59).
GetSecond Возвращает секунды, которые содержит данный объект CTime. (от 0 до 61).
GetDayOfWeek Возвращает день недели (1 - воскресенье, 2 - понедельник, и т.д.).
КонверторыGetGmtTm Разбивает объект CТime на компоненты - основываясь на UTC.
GetLocalTm Разбивает объект CTime на компоненты - основываясь на локальной временной зоне (local time zone).
GetAsSystemTime Переводит информацию о времени сохраненную в объекте CТime в Win32-совместимую SYSTEMTIME структуру
Format Переводит объект CТime в форматированную строку - основываясь на локальной временной зоне (local time zone).
FormatGmt Переводит объект CТime в форматированную строку - основываясь на UTC.
Операторыoperator = Присвоить новое значение.
operator + - Добавить или вычисть объекты CТimeSpan или CТime.
operator +=, -= Добавить или вычисть объект CТimeSpan к или из данного объекта CТime.
operator ==, < , etc. Сравнить два абсолютных значения времени.
Сохранениеoperator << Вывести объект CTime в CArchive или CDumpContext.
operator >> Получить объект CTime из CArchive.
3. Класс COleDateTime
Библиотека MFC предоставляет класс COleDateTime, облегчаю-
щий работу с датами. Вы можете сформировать дату следующим образом:
COleDateTime date(1998, 10, 1, 18, 0, 0); // 1 октября 1998, 6 часов вечера
В классе COleVariant определен оператор присваивания для COleDateTime, а у COleDateTime
есть функции-члены для
показания времени:
TRACEftime = %d:%d:%d\n",
date.GetHourO, date.GetMinuteC), date.GetSecond());
Если у Вас есть переменная VARIANT, содержащая значение типа DATE, то для преобразо-
вания даты в строку можно использовать COleVariant::ChangeType-.
COleVariant vaTimeDate = date;
COleVariant vaTemp;
vaTemp.ChangeType(VT_BSTR, &vaTimeDate);
CString str = vaTemp.bstrVal;
TRACEC'date = %s\rT, str);
И последнее замечание о параметрах Invoke-, у функции, вызываемой через IDispatch, мо-
гут быть необязательные параметры (optional parameters). Если компонент объявляет тип
последних параметров (крайних справа) как VARIANT, то клиент не обязан передавать их. При
таком вызове (без определения значения необязательного параметра) поле vt объекта VARIANT
на стороне компонента будет содержать VT_ERROR.
4. Классы файлов MFC
Иерархия классов MFC
Библиотека MFC содержит большую иерархию классов, написанных на С++. Структура иерархии приведена на рис. 1. В ее вершине находится класс СObject, который содержит различные функции, используемые во время выполнения программы и предназначенные, в частности, для предоставления информации о текущем типе во время выполнения, для диагностики, и для сериализации.
Информация о типе времени выполнения
Если указатель или ссылка ссылается на объект, производный от класса CObject, то в этом случае предусмотрен механизм определения реального типа объекта с помощью макроса RUNTIME_CLASS(). Хотя в С++ имеется механизм RTTI, механизм, реализованный в MFC, намного более эффективен по производительности.
Диагностика
Каждый класс, производный от CObject, может по запросу проверить свое внутреннее состояние и выдать диагностическую информацию. Это интенсивно используется в MFC при отладке.
Сериализация
Сериализация - это механизм, позволяющий
преобразовать текущее
Основные классы
Некоторые классы порождаются непосредственно от CObject. Наиболее широко используемыми среди них являются CCmdTarget, CFile, CDC, CGDIObject и CMenu. Класс ССmdTarget предназначен для обработки сообщений. Класс СFile предназначен для работы с файлами. Класс CDC обеспечивает поддержку контекстов устройств. Об контекстах устройств мы будем говорить несколько позднее. В этот класс включены практически все функции графики GDI. CGDIObject является базовым классом для различных DGI-объектов, таких как перья, кисти, шрифты и другие. Класс СMenu предназначен для манипуляций с меню. От класса CCmdTarget порождается очень важный класс CWnd. Он является базовым для создания всех типов окон, включая масштабируемые ("обычные") и диалоговые, а также различные элементы управления. Наиболее широко используемым производным классом является CFrameWnd. Как Вы увидите в дальнейшем, в большинстве программ главное окно создается с помощью именно этого класса.
От класса CCmdTarget, через класс CWinThread, порождается, наверное, единственный из наиболее важных классов, обращение к которому в MFC-программах происходит напрямую: CWinApp. Это один из фундаментальных классов, поскольку предназначен для создания самого приложения. В каждой программе имеется один и только один объект этого класса. Как только он будет создан, приложение начнет выполняться.