Структуры. Даты каких-либо событий можно записать следующим образом

Пример

Пример

Пример

Пример

Даты каких-либо событий можно записать следующим образом:

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]);

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: