Скачиваний:
316
Добавлен:
28.03.2021
Размер:
378.53 Кб
Скачать

19. Инициализация массивов объектов. Указатель this. Указатели на объекты.

Создаются, как и массивы примитивных типов данных. В switch можно использовать int, char. Многомерные массивы объектов индексируются в точности так же, как и массивы любых дру­гих типов данных. Для создания массива объектов сначала выделяется память под массив объектов, а потом, в этой памяти надо создать нужное количество объектов с нужными параметрами конструктора. В момент создания объектов можно задавать одинаковые параметры конструкторам, а можно и разные, например, по какому-нибудь алгоритму.

Если класс определяет конструктор с параметрами, то можно инициализировать каждый объект массива путем указания списка инициализации в точности так, как это делается для массивов других типов. Однако точная форма списка инициализации будет определяться числом параметров конструктора. Для объектов, чьи конструкторы имеют только один параметр, можно просто указать список начальных значений, используя обычный синтаксис инициализации массивов. Каждое значение в списке по порядку передается конструктору элемента в массиве при его создании.

#include <iostream.h>

class cl {

int h;

int i;

public:

cl(int j, int k) { h=j; i=k; } // конструктор

Int get_i() {return I; }

Int get_h() {return h; }

};

Int main()

{

cl ob[3] = {

cl(1, 2),

cl(3, 4 ),

cl(5, 6)

}; // инициализаторы

int i;

for (i=0; i<3; i++) {

cout << ob[i].get_h();

cout << ", ";

cout << ob[i].get_i() << "\n";

}

return 0;

}

Каждый новый объект имеет скрытый от пользователя свой указатель. Иначе это можно объяснить так. Когда объявляется объект, под него выделяется память. В памяти есть специальное поле, содержащее скрытый указатель, который адресует начало выделенной под объект памяти. Получить значение указателя в компонентах-функциях объекта можно с помощью ключевого слова this (рис. 2). Для любой функции, принадлежащей классу my_class, указатель this неявно объявлен так:

my_class *const this;

Основные свойства и правила использования указателя this:

− каждый новый объект имеет свой скрытый указатель this;

− указывает на начало своего объекта в памяти компьютера;

− не надо дополнительно объявлять;

− передается как скрытый аргумент во все нестатические (т. е. не имею-щие спецификатора static) компоненты-функции своего объекта;

− является локальной переменной, которая недоступна за пределами объ-екта (она доступна только во всех нестатических компонентах-функциях своего объекта);

− разрешается обращаться к указателю this непосредственно в виде this или *this

Доступ к содержимому структуры можно получить напрямую через объект или через указатель на эту структуру. Аналогично можно обратиться и к объекту класса: через сам объект или через указатель. Для того, чтобы получить доступ к объекту через имя объекта, используется оператор «.». А если для этого случая указываем на объект, то необходимо использовать оператор «->». Чтобы объявить указатель на объект, используется тот же синтаксис, как и в случае объявления указателя на переменную других встроенных типов.

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

Указатели на объекты играют главную роль в реализации полиморфизма в С++.