Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пользовательские типы данных.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
24 Кб
Скачать
☆

3. Структуры (structures)

Немного посложнее выглядят структуры. Структуры – это способ хранения информации в нескольких переменных. Поясню поподробнее. В одной переменной можно хранить сразу несколько. Объявляется структура вот так:

1

2

3

4

5

struct tank{

int health;

string name;

int power

};

Осталось лишь понять, как информацию из структуры собственно говоря извлечь. Делается это с помощью оператора «точка» - оператор бинарный. Первый операнд – имя переменной, из которой извлекается, второй – имя переменной, которая извлекается (к примеру, tank.health). Как правило, хоть это и не принципиально, пробелов не ставится. Возвращаемый тип соответственно зависит от типа извлекаемой переменной.

Кроме того, в структуре могут быть и функции – члены структур. Это единственные функции, из которых структурные переменные видны напрямую, без применения оператора «точка». И еще один аспект – в этих функциях виден специальный указатель – this, это указатель на всю переменную, содержащую структуру.

Еще одна вещь – это конструкторы и деструкторы. Тут все просто. Конструкторы – функции-члены, вызываемые непосредственно перед созданием экземпляра структуры, деструкторы – перед непосредственным уничтожением – к примеру, после выполнения программы или после уничтожения содержимого указателя оператором delete. Ни тот ни другой не имеют возвращаемого типа вообще. Даже void. Конструктор имеет имя такое же, как и у структуры, к деструктору прибавляется тильда (~, над “ё”).

Любые функции, включая функции-члены структуры, кроме деструкторов можно перегружать. Перегруженная функция – функция, имеющая несколько реализаций, различающихся возвращаемым типом или списком аргументов, но имеющих одно имя. В зависимости от требуемого получаемого типа или получаемых аргументов компилятор вызывает нужную функцию. С перегруженными конструкторами сложнее.

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

Конструкторы, имеющие один аргумент типа «const c&”, где с – имя структуры называются конструкторами копирования или конструкторами копии. Они вызываются при вызове оператора «=» между двумя значениями типа c.

Конструкторы, имеющие один аргумент другого типа, называются конструкторами преобразования и вызываются при явном преобразовании к типу структуры (явно написано «преобразовать к типу») или неявном (при приравнивании к значению другого типа).

И, наконец, конструкторы, имеющие другой список аргументов, вызываются видом «a(b,c,d) e», что означает «создается экземпляр класса a конструктором со списком аргументов типов переменных как у переменных соответственно b, c, d и именем e. Запутано, но разберетесь.

4. Константы

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

1

const int c;

Константами могут быть и функции-члены структуры. С ними все тоже достаточно просто. То, что функция является константой, гарантирует, что структурные переменные не будут изменены. Если константа является функцией, то ключевое слово пишется в заключительной части прототипа, то есть перед точкой с запятой или открывающей фигурной скобкой.

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