Перегрузка конструктора
Также как и любые другие функции, конструкторы могут перегружаться. Перепишем предыдущий пример, добавив в него перегружаемый конструктор, в который можно передавать значения 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];
}
}