Создание объектов заданной структуры с использованием конструкторов
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Напомним, что для каждого данного, описанного в программе, транслятор выделяет память, к которой в дальнейшем при исполнении производится обращение. Однако, если заранее известны начальные значения данных, то имеется возможность использовать средства инициализации, которые задают эти значения при описании данных, а транслятор генерирует двоичные коды, соответствующие этим данным. Это в определенной степени сокращает время исполнения сгенерированной программы и позволяет составлять более компактные программы.

Например, по оператору вида int a =6 будет выделена память в два байта и записан шестнадцатиричный код 00 06, а по оператору char d=’0’ будет выделена память в один байт и записан шестнадцатиричный код 30.

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

Ый способ

Этот метод инициализации аналогичен, описанному выше, и может быть использован, если все члены-данные класса являются открытыми.

Например,

сlass M

{

public:

int h;

char k;

char w [12];

………..

};

int main()

 {M obj={56,’t’,”jjjjjjj”}’;…} ;/*объявление и инициализация членов данных объекта*/

 В этом случае в соответствии с позициями членам-данным объекта будут присвоены следующие значения : h=56; k=’t’; w=”jjjjjjj”

Примечание

Если в классе определены другие открытые данные, то они не будут инициализированы.

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

Способ

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

 

Особенности конструктора

- Имя конструктора обязательно совпадает с именем класса; именно по этому признаку транслятор определяет имеется ли конструктор в классе.

- В конструкторе никогда не указывается тип возвращаемого значения.

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

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

- Для конструктора должен быть определен режим public. Если для него определен режим private, то он может быть использован только другими членами-функциями класса, и он не может быть вызван автоматически.

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

 

Пример использования конструктора

#include<iostream.h>

class m // заголовок класса

{

int a[12]; // закрытые члены-данные

int n;

int g;

public:

m(int n1,int *x)// описание конструктора с двумя параметрами

{

for(int i=0;i<n1;i++)

{     

      a[i]=x[i]; ….// передача внешнего массива

       cout<<a[i]<<' '<<x[i]<<endl;

}

n=n1;

} ..// конец определения конструктора

};.// конец определения класса

 

int main() // главная функция

{ int f[4]={4,3,2,1}; // инициализация массива f

m obj1(4,f); /* создание объекта и вызов конструктора по передаче массива f в массив а объекта obj1; фактическими параметрами при вызове конструктора являются данные 4 и f)*/

return 0;

}

 

Способы определения объектов с использованием конструкторов

Возможно использование двух способов.

1-ый способ –явный вызов конструктора

Пример

Для приведенного выше примера m obj1=m(4,f);// в данном случае явное обращение к функции конструктора в классе m.

2-ой способ – неявная форма - указание фактических параметров в определении объекта.

m obj1(4,f);

m obj2(2,f);

 m obj3(1,f);

Дата: 2019-03-05, просмотров: 216.