Пользовательские типы данных
Помимо структур и объединений разработчик программного обеспечения на C++ имеет возможность моделирования новых типов данных на базе уже имеющихся в его распоряжении типов. Формирование пользовательских типов осуществляется с использованием ключевого слова typedef, за которым указывается какой-либо из имеющихся типов данных и следующий за ним идентификатор, назначающий новое имя для выбранного типа. Фактически, таким образом определяется синоним типа данных. Например, выражение
typedef unsigned char byte;
определяет новый тип данных byte, суть которого такая же, как и типа unsigned char. Следовательно, в программе возможно определение переменных типа byte, которые в памяти будут занимать один байт и смогут принимать значения от 0 до 255, например:
byte nlnput = OxFF; byte nOutput = 0;
Синтаксис объявления пользовательского типа для массива выглядит следующим образом:
typedef char Names[27];
В этом случае объявление переменной типа Names
Names name;
будет означать, что такая переменная представляет собой строку из 27-ми символов.
Наиболее часто переопределение типов данных используется совместно со структурами. Благодаря этому становится возможным создание новых типов данных, характерных для сложных объектов, объединяющих разнотипные характеристики. Например, создадим тип данных COORD, объекты которого будут нести информацию о трех координатах в пространстве:
typedef struct
{
double х;
double у;
double z;
} COORD;
Теперь можно объявить объект my Point типа COORD: COORD myPoint;
и обращаться к его элементам так, как если бы он был объявлен как соответствующая структура:
myPoint.x = 5.654; myPoint.y » 0; myPoint.z = 3.14;
Функции работы с датой и временем
Функции и типы данных, необходимые для работы с датой и временем, объявлены в заголовочном файле time.h. В частности, этот файл содержит определения типа данных time t:
typedef long time_t; и структуры tm, которая объявлена следующим образом:
struct tm {
int tm_sec; // секунды
int tmjnin; // минуты
int tm_hour; // часы (0-23)
int tmjnday; // дата (1-31)
int tm__mon; // месяц (0-11)
// год (текущий тед минус 1900)
int tm_year;
// день ведели (0-6; Воскр = 0)
int tm_wday;
int tm_yday; // день а году (0-365)
int tm_isdst; // О если Зимнее время
};
Ниже приводится таблица 9.1. обобщающая часть объявленных функций с кратким описанием их работы.
Таблица 9.1.
Функции работы с датой и временем
Наименование |
Краткое описание |
as с time |
преобразует время и дату из формата структуры типа tm в символьную строку |
clock |
возвращает число "тиков" процессора, прошедших от начала запущенного процесса |
с time |
преобразует время я дату из формата time_t в символьную строку |
difftime |
вычисляет интервал между двумя заданными временными параметрами |
gmtime |
преобразует дату и время из формата time t в формат структуры tm по Гринвичу (GMT) |
local time |
преобразует дату и время из формата time_t в формат структуры tm |
mktime |
преобразует дату и время в календарный формат |
_strdate |
преобразует текущую дату в символьную строку в формате mm/dd/yy |
strftime |
форматирует время для последующего вывода |
_strtime |
возвращает текущее системное время в виде символьной строки |
time |
возвращает время в секундах, прошедшее с полуночи (0 часов 0 минут 0 секунд) 1 января 1970 г, по Гринвичу |
tzset |
устанавливает значения глобальных переменных daylight, _timezone, и tzname |
В качестве обобщающего примера рассмотрим программу работы с датой и временем:
#include <iostream.h>
#include <time.h>
int main ()
{
time_t tt;
tm *рМуТimе;
tt = time(NULL);
pMyTime = localtime(Stt);
cout « " Текущее время: " ;
cout « asctime (pMyTime) ;
return 0;
}
В рассматриваемом примере используется функция time (), имеющая прототип
time_t time(time_t *timer);
возвращающая число секунд, прошедших с 00:00:00 1 января 1970 г. Параметр timer также принимает возвращаемое функцией значение. Для более удобной работы с датой и временем полученные данные преобразуются функцией localtime() к формату структуры tm. Применение функции asctime() позволяет вывести полученную таким образом информацию в виде строки символов.