Массив объектов (массив классов). Повторение и маленький шаг вперёд

Пояснений будет мало. Основная часть этой темы расписывалась в темах о массивах структур. Эта статья сухое изложение того, что не было упомянуто там, для тех, кто проходит по темам моего сайта. Для моей аудитории это может быть одновременно и повторением темы, и небольшим продвижением немного вперёд. Как бы то ни было, я надеюсь, что выбранный подход окажется достаточно эффективным и приведёт к пониманию описанной части.
Массив объектов — это прежде всего просто массив, а уже потом массив объектов. Создаётся массив объектов классов так же как массив объектов структур. Единственное отличие, которое, возможно, может бросаться в глаза, это использование в объектах классов конструкторов. Конструкторы в С++ есть и в структурах, но в структурах конструкторы используют реже, чем в классах.
Одиночные объекты классов/структур не так широко используются, как массивы объектов классов/структур. Чтобы не писать постоянно "классов/структур" и поскольку последние темы сайте (предшествующие этой, разумеется) описывают классы, буду писать просто "классы" и "массив объектов". В языке С++ структуры и классы практически одно и то же, только доступ по умолчанию отличается (приватны у классов, открытый у структур). Чтобы не говорить длинно, просто буду использовать "массив объектов".
Посмотрим пример самого простого использования массива объектов:


Как видите, массив создавать достаточно просто. Остаётся вопрос: "Как использовать массив объектов?". Тут работает простая формула: сначала берём элемент вместе с индексом, т. е. получается, что вытаскиваем элемент, и к вытащенному элементу применяем операцию "точка", чтобы использовать элементы класса.

Если есть выбор между инициализацией и присваиванием, лучше использовать инициализацию. В листинге #3 использовалось присваивание, что не очень хорошо. То же самое, но путём инициализации можно было проделать так:

Тут просто надо привыкнуть к тому, что сначала вытаскивается элемент из массива и к этому элементу применяется точка, которая даёт доступ к открытым элементам класса. В показанном случае инициализации был использован способ обычной инициализации массива указанием элементов через запятую, но чтобы спровоцировать запуск конструктора, чтобы тот помог затащить значения в класс, рядом указывали название класса. По листингу #4 видно, как это проделывается. В таком случае каждое значение представлено вызовом метода конструктора. Если класс имеет более одного конструктора, для разных элементов можно использовать разные конструкторы:

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

Возможно, кому-то сейчас сложно понять, где конструктор по умолчанию описан. В коде использовано смешанное описание конструктора, гибрид. Поскольку всем параметрам в прототипе конструктора указаны значения по умолчанию, то объявление объекта без параметров в круглых скобках провоцирует запуск конструктора по умолчанию, если бы в объявлении объекта в круглых скобках были бы параметры, то запускался бы конструктор с параметрами. Гибридный такой вариант написания конструктора, в общем.
Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

Добавить комментарий

Ваш e-mail не будет опубликован.

− 1 = 3

Поиск

 
     

Случайная книга в электронном формате

https://www.litres.ru/n-morgan/javascript-dlya-detey-samouchitel-po-programmirovaniu-22145329/?lfrom=15589587
Яндекс.Метрика
НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Классическая ошибка, которую совершают проектировщики абсолютно надежных систем, – недооценка изобретательности клинических идиотов.

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок