Пример
Пример
Пример
Пример
Даты каких-либо событий можно записать следующим образом:
struct date {
int day;
char month[ 9];
int year;
}d;
В этом примере описаны структура date и переменная d, принадлежащая типу date. Переменная d описана как структура, состоящая из трех элементов: day, month[9], year. Каждый элемент содержит данные:
элемент day — целое число, обозначающее день (от 1 до 31);
элемент month[9] — строка символов с названием месяца;
элемент year — целое число, обозначающее год.
Переменная типа структуры (d) может быть объявлена вне описания структуры при помощи имени структуры, которое иногда называют структурньш тэгом [7], например:
struct date {
int day;
char month[9];
int year;
};
Тэг структуры может начинаться со слова struct:
struct date d;
Для обращения к элементу структуры нужно указать имя переменной и имя элемента структуры, разделив их точкой. К элементу структуры применима операция присваивания. Например, чтобы заслать в d дату 14 апреля 1930 г., нужно в программу включить следующие операторы:
d.day=14;
d.month[9]="апреля";
d.year=1930;
Структура может передаваться в функцию по имени.
#include<iostream.h>
#include<string.h>
struct date //описание структуры
{
int day;
char month[ 9];
int year;
}d; //объявление переменной d
void show_date(date d) //функция вывода даты
{
cout«"Числo: "«d. day«endl;
соut«"Месяц: "«d. month«endl;
соut«"Год: "«d. year«endl;
}
void main(void)
{ d.day=2;
strcpy(d.month,"август"); //копировать название
//месяца
d.year=1953; //в строку символов show date(d); //обращение к функции вывода даты
}
В том случае, когда нужно изменить значения элементов структуры в функции, структура должна передаваться в функцию с помощью адреса (&), например:
show_date(&d);
Внутри функции следует использовать указатель на структуру, например:
d->day=19;
#include<iostream.h>
#include<string.h>
struct date //описание структуры
{
int day;
char month[9];
int year;
}
void change_date(date *d) //функция изменения даты
{ d->day=19;
d->year=1993;
}
void main(void)
{
d.day=14;
strcpy(d.month,"апреля");
d.year=1930;
соut«"Дата: "<<d.day«" "<<d.month«" "«d. year«endl;
change_date(&d);
соut«"Новая дата: "<<d.day«" "<<d.month«" " «d. year«endl;
}
В результате решения этой программы на экран дисплея будет выведено:
Дата: 14 апреля 1930
Новая дата: 19 апреля 1993
4.5.2. Объединения
Объединения (union) в языке C++ отличаются от структур способом хранения информации. В каждый момент времени объединение хранит значение только одного элемента. Память распределяется для хранения наибольшего элемента объединения. Описание типа union имеет следующий вид:
union имя_объединения {
тип1 имя элемента!;
mnN имя элементам;
}имя_переменной_типа_объединения;
Пример Единицы измерения времени можно представить следующим образом:
union time
{
int hour;
long second;
}t;
В этом примере описаны объединение time и переменная t, принадлежащая типу time. Переменная t описана как объединение, состоящее из двух элементов: hour и second. Элементы объединения содержат данные:
элемент hour — целое число типа int, обозначающее время в часах;
элемент second — целое число типа long, обозначающее время в секундах.
Под элементы объединения будет отведено 4 байта памяти, так как наибольший элемент (second) имеет тип long.
Переменная объединения может быть объявлена вне описания объединения, например:
union time
(
int hour;
long second;
};
time t;
При обращении к элементу объединения нужно указать имя переменной и имя элемента объединения, разделив их точкой:
t.hour=10;
#include<iostream.h> union time {
int hour;
long second;
}t;
void main(void) {
t.hour=720;
cout«"B месяце "<<t.hour«" часов."«endl;
t.second=2592000;
cout«"B месяце" «t. second«" секунд."«endl;
}
В этой программе первоначально присваивается и выводится на экран значение элемента hour. Затем происходят присваивание и вывод на экран значения элемента second, при этом значение, присвоенное элементу hour, уничтожается. Очевидно, что использование объединений в программах позволяет экономить память компьютера. Еще большей экономии памяти в программах на языке C++ можно достичь, если использовать анонимные объединения. В анонимных объединениях нет имени, переменная объединения не объявляется:
union { тип1 имя_элемента1;
типN имя_элементаN; };
К элементам анонимного объединения обращаются по имени (без точки), как к обычным переменным в программе. Пример
#include<iostream.h> void main(void)
{
union
{
int hour;
long second;
};
hour=720;
cout«"B месяце "<<hour«" часов. "«endl;
second=2592000;
cout«"B месяце "<<second«" секунд."«endl;
}
В этой программе значение элемента hour анонимного объединения будет уничтожено в момент присваивания значения элементу second.
Структура – это объединенное в единое целое множество поименованных элементов данных (полей). Поля могут быть различного типа, они все должны иметь различные имена.
struct Date //объявляется с помощью ключевого слова struct
{
int day;
char month[10];
int year;
}; //объявление завершается точкой с запятой
Date birthday; //переменная типа Date
Когда объявляется переменная-структура, компилятор автоматически выделяет количество памяти, достаточное, чтобы разместить все ее члены:
day – 4 байта | |
Month – 10 байт | |
year – 4 байта |
Объявляются переменные-структуры следующим образом:
Одновременно с объявлением структуры можно объявить одну или несколько переменных:
struct Date
{
int day;
char month[10];
int year;
}; data1, data2, data3, …, dataN;
Доступ к отдельным членам структуры осуществляется с помощью оператора "." (точка):
имя_объекта.имя_поля_структуры
//присваивание значений полям переменной birthday
data1.day =11; data1.month="март"; data1.year=1993;
Date Data;
// вывод на печать
printf("%d %s %d",data1.day, data1.month, data1.year);
Так как поле month является массивом символов, то чтобы получить доступ к отдельным символам в массиве data1.month, можно использовать индексы вместе с data1.month. Например, с помощью следующего кода можно посимвольно вывести на экран содержимое data1.month:
for(t=0; data1.month [t]; t++) printf (data1.month [t]);