Структуры (записи)

Пусть необходимо сохранить и обработать данные о книгах. Такая структура данных как массив не подходит, так как это данные о книге - это совокупность неоднородных элементов (автор, год издания, название, тираж). Структура - это поименованная совокупность поименованных элементов, имеющих в общем случае разный тип, и расположенных в памяти компьютера последовательно. Каждая структура включает в себя один или несколько объектов, называемых элементами структуры. Элементы структуры также называют полями структуры.

Формат описания структуры:

struct [имя типа]

{

тип1 имя_поля1;

тип2 имя_поля2;

тип n имя_поля_n;

}[список определений];

Поля структуры могут иметь любой тип, кроме типа этой же структуры.

В качестве списка определений можно указывать через запятую имена программных объектов описанного типа.

Например, опишем структуру с тремя полями:

struct student

{

char fio[30];

int group, mark;

} s1, s2;

Такое определение вводит новый тип данных student, который может быть использован при определении программных объектов, и создает две переменные s1 и s2 типа student.

Если список определений отсутствует, то описание структуры представляет собой описание абстрактного типа данных, то есть является объявлением, но не определением (память ни под какие объекты не выделяется).

Имя_типа в описании структуры допустимо опускать, только если присутствует список определений.

Если имя типа указано, то в любом месте программы можно создавать объекты структурированного типа, таким же образом как создаются объекты любого другого типа.

Например,

student s3,s[40]; //создали переменную s3 типа student и массив s типа student.

Обратите внимание, что слово «структура» может быть использовано как для обозначения абстрактного типа данных, так и для обозначения структурированного программного объекта.

Для обращения к полям структуры (структурированного объекта), обычно используют уточненные имена, то есть конструкцию вида

имя_структуры.имя_поля_структуры

Например,

s1.group= 121;

s1.mark=5;

Если определен указатель на структуру, то для обращения к элементам структуры можно использовать операцию выбора компонентов структурного объекта ->

имя указателя->имя элемента структуры

Например,

student *st;

st->group= 222; // эта запись равносильна записи (*st).group=222;

Инициализировать конкретную структуру можно только при описании перечислением ее элементов в скобках {} в порядке их описания, например

student s4= {“Fedorov”, 122, 4};

Для переменных одного и того же структурного типа определена операция присваивания, то есть поэлементное копирование, например

s1=s2;

Размер структуры не обязательно равен сумме размеров ее элементов, так как они могут быть выровнены по границам машинных слов. Поэтому для определения размера структуры используют операцию sizeof().

Объединения (запись с вариантами)

Объединение представляет собой частный случай структуры, все поля которой располагаются по одному и тому же адресу. Формат описания такой же, но вместо ключевого слова struct используются ключевое слово union. Размер объединения равен наибольшему размеру из его полей.

Если бы элементы объединения имели одинаковую длину и одинаковый тип, а отличались бы только именем, то использование объединений было бы подобно применению ссылок.

Основное достоинство объединения – возможность разных трактовок одного и того же содержимого участка памяти.

Например,

union

{

float a;

unsigned int b;

}ab;

Если ввести ab.a=3.78, то затем можно рассматривать код его представления как беззнаковое целое cout<<ab.b;

Основное назначение объединения – обеспечить возможность доступа к одному и тому же участку памяти с помощью объектов разных типов.

На практике объединения чаще всего используют в качестве поля структуры. Например,

enum sextype={male, female};

enum ranktype={soldier,officer};

struct

{

char fio[40];

int year;

sextype sex;

union

{

int children;

ranktype rang;

};

}s1;

if (s1.sex==male) {cout<< “Еnter rank”; cin>>s1.rang;};

else {cout<< “Enter number of children”; cin>>s1.children};


Строки

В С++ тип данных «строка» не определен.

В языки С введено понятие С-строка. С-строка – это массив символов, заканчивающийся ноль-символом. Ноль-символ – это символ с кодом, равным нулю, что записывается в виде esp-последовательности ‘\0’.

В С++ строка может быть описана двумя способами:


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



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