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

Так же, как и любая функция в языке Си++, конструкторы могут быть перегружены, Это означает, что классе могут быть определены несколько конструкторов. Транслятор так же, как при вызове любой перегружаемой функции, выбирает тот конструктор, который с учетом допускаемых преобразований, имеет наиболее «близкий» по типу и количеству к набору формальных параметров набор фактических параметров.

Пример

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

#include<iostream.h>

#include <conio.h>

class m

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

int n;

int g;

public:

m(int n1)/* первый конструктор с одним параметром по количеству вводимых элементов*/.

{ n=n1;

cout<<"vvedite "<<n1<<" dannie"<<endl;

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

{ cout<<”vvedite element”<<endl;

     cin>>a[i];

       cout<<”a[i]=”<<a[i]<<endl;

}

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

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

{

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

{ a[i]=x[i];

       cout<<”a[i]=”<<a[i]<<endl;

}

n=n1;

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

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

 

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

 

{ clrscr();

int f[4]={4,3,2,1};

m obj1=m(4,f); //при инициализации вызывается второй конструктор

m obj2[3]={m(2),m(1),m(1,f)}; /*при инициализации первых 2-х элементов массива вызывается первый конструктор, а для третьего элемента вызывается второй конструктор*/

}

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

Формат записи оператора инициализации массивов имеет следующий вид:

Имя класса массив объектов={список явных вызовов конструкторов для каждого элемента объекта}

Пример

m obj[3]={m(4,f),m(3,f),m(1,y)}; /* описание и инициализация массива из трех объектов*/

В случае, если для приведенного примера не будет указан хотя бы один вызов, то транслятор выдаст сообщение об ошибке.

- Если конструктор содержит только один параметр, то эти параметры могут быть указаны без явного вызова конструктора.

Пример

m obj[3]={1,5,4)}; /*описание массива из трех объектов для случая, когда конструктор содержит только один формальный параметр */

 

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

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

Пример

#include<iostream.h>

#include <conio.h>

class m

{

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

int n;

int g;

public:

m()//конструктор без параметров

{ cout<<"constructor without parametr "<<endl;

       cout<<" vvedite kolichestvo dannie "<<endl;

       cin>>n;

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

       { cout<<"elementi "<<endl

       cin>>a[i];

        cout<<a[i]<<endl;

      }  

}// конец определения конструктора без параметров

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

{cout<<"constructor with 2 parametrami"<<endl;

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

{ a[i]=x[i];

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

}

n=n1;

} //конец определения конструктора без параметров

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

 

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

{ clrscr();

int f[4]={4,3,2,1};

m obj1=m(4,f); // использование конструкторами с 2-мя параметрами

m obj4; // использование конструктора без параметров

m obj2[3]={m(4,f)};/* вызов конструктора с 2-мя параметрами для 1-го элемента массива объектов, вызов конструктора без параметра для 2-го и 3-его элемента массива*/

} // конец определения главной функции

Внимание

Если в определении объекта указаны скобки () ( как предполагается для вызова конструктора без параметров), то это приводит к ошибке.

Например, вместо m obj4 будет записано m obj4(). Такая запись транслятором воспринимается как объявление функции obj4 без параметров, которая возвращает значение типа m.

 

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