Конструктор с параметрами по умолчанию

Перегрузка конструктора

Также как и любые другие функции, конструкторы могут перегружаться. Перепишем предыдущий пример, добавив в него перегружаемый конструктор, в который можно передавать значения n и k. В этом примере экземпляр класса можно описывать например так prostr x; в этом случае конструктор вызывается без параметров, или так prostr x (3,5); в этом случае вызывается перегружаемый конструктор с параметрами.

#include <iostream>

#include <math.h>

using namespace std;

class prostr{

int n;

int k;

double **a;

double min;

double max;

int imin;

int jmin;

int imax;

int jmax;

public:

prostr(int,int);

prostr();

void poisk_min();

void poisk_max();

void vivod_result();

void delete_a();

};

//Текст второго конструктора

//Нельзя в качестве формальных параметров конструктора использовать переменные n и k,

//потому что это имена членов класса. Если в качестве формальных параметров указать n и k,

//то внутри конструктора будут использоваться локальные переменные n и k, но при этом члены //класса prost n и k будут не определены.

prostr::prostr(int k1, int n1)

//Входными параметрами являются размерность пространства n1 и количество точек в //пространстве k1.

{

int i,j;

//Присваиваем членам класса n и k значения входных параметров конструктора

k=k1;

n=n1;

a=new double*[k];

for(i=0;i<k;i++)

a[i]=new double[n];

for(j=0;j<n;j++)

{

cout<<"VVedite koordinati "<<j<<"tochki"<<endl;

for(i=0;i<k;i++)

cin>>a[i][j];

}}

void main()

{

//Можно вызывать конструктор с параметрами

prostr x(3,5);

//или без prostr x; в этом случае будет вызываться

//тот же конструктор, что и в предыдущем примере.

x.poisk_max();

x.poisk_min();

x.vivod_result();

x.delete_a();

}

Теперь рассмотрим, как можно использовать параметры по умолчанию в конструкторе. Оставим в нашей задаче только конструктор с параметрами (n1 и k1), но сделаем их по умолчанию равными 2 и 10 соответственно. В этом случае, при описании экземпляра класса без параметров n по умолчанию будет равно 2, а k – 10. Однако можно описать экземпляр класса, передав в него любые значения n и k. Например, так: prostr x(3,5);

class prostr{

int n;

int k;

double **a;

double min;

double max;

int imin;

int jmin;

int imax;

int jmax;

public:

//Прототип конструктора с параметрами по умолчанию k=2, n=10.

//В качестве имен формальных параметров конструктора

//не могут быть выбраны переменные n и k, потому

//что эти имена совпадают с именами членов класса.

prostr(int k1=2,int n1=10);

void poisk_min();

void poisk_max();

void vivod_result();

void delete_a();

};

//Конструктор с параметрами по умолчанию k=2, n=10.

prostr::prostr(int k1, int n1)

{

int i,j;

k=k1;

n=n1;

a=new double*[k];

for(i=0;i<k;i++)

a[i]=new double[n];

for(j=0;j<n;j++)

{

cout<<"VVedite koordinati "<<j<<" tochki"<<endl;

for(i=0;i<k;i++)

cin>>a[i][j];

}

}



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: