Первый шаг при создании объектов – объявление одной или нескольких объектных переменных. Аналогично обычным переменным объектные переменные можно создавать либо статически, либо динамически. Оба способа создания переменных реализованы только в С++. В остальных языках используется только динамическое создание объектов. Объекты адресуются своими указателями, хотя явно этого не видно, т.к. разрешено только сравнивать указатели на равенство и присваивать указателям допустимые значения.
Рассмотрим сначала объявление и создание объектов в С++.
Для статического создания объекта достаточно объявить одну или несколько переменных соответствующего классового типа:
Circle Circ1, Circ2;
При обработке этой строки компилятор включает в создаваемый код обращение к конструктору без параметров, поэтому объекты создаются с заранее заданными значениями свойств. При необходимости вместо конструктора без параметров можно вызвать конструктор с параметрами, например, следующим образом:
Circle Circ3 (50, 50, 20);
При обработке этой строки компилятор анализирует входные значения (их количество и тип) и включает код для вызова подходящего конструктора. После такого неявного создания объектов можно эти объекты использовать, обращаясь к их методам:
Circ1.Show ( ); // отобразить объект Circ1
Circ3.MoveTo (100, 100); // переместить объект Circ3
int r = Circ3.GetR ( ); // запросить радиус объекта Circ3
Для динамического создания объектов, прежде всего, необходимо объявить ссылочную переменную:
Circle *pCirc1;
При обработке этой строки компилятор выделяет память только для хранения адреса будущего объекта. После этого записывается строка для динамического создания объекта, причем для выделения памяти используется стандартная функция new, a для инициализации выделенной области явно вызывается один из конструкторов класса:
pCirc1 = new Circle ( );
При необходимости объявление объектной переменной и вызов конструктора можно объединить в одной строке:
Circle *pCirc1 = new Circle ( );
Вызов методов динамических объектов выполняется следующим образом:
pCircle -> Show ( ); // отобразить
pCircle -> MoveTo (200, 200); // переместить
int Rad = pCirc2 -> GetRad ( ); // получить радиус
В языках Java и C# предусмотрено только динамическое создание объектов. Объекты неявно адресуются своими указателями. Объявление объектной переменной и создание объекта может быть либо разделено
Circle Circ1;
Circ1 = new Circle ( );
либо объединено в одну строку:
Circle Circ2 = new Circle (100, 100, 50);
После создания объекта можно вызывать его методы:
Circ2.Show ( );
Circ2.MoveTo (200, 200);
Rad = Circ2.GetRad ( );
В языке Delphi Pascal объекты также можно создавать только динамически и адресовать своими указателями:
var Circ1 : TCircle; // объявление объекта-окружности
Circs : array [1..100] of TCircle; // объявление массива
// объектных указателей
Для создания объекта необходимо указать имя класса и вызвать один из реализованных конструкторов:
Circ1 := TCircle.Create;
for i := 1 to 100 do Circs[i] := TCircle.Create (параметры);
Обращение к методам выполняется следующим образом:
Circ1.Show;
Circ1.MoveTo (200, 200);
for i := 1 to 100 do Circs[i].Show;
Из последнего примера видно, что легко можно объявлять и использовать массивы объектных переменных, что еще не раз будет использовано в последующих темах пособия.