Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава 12 Классы_Объекты_Массивы объектов 2015.doc
Скачиваний:
65
Добавлен:
29.02.2016
Размер:
110.59 Кб
Скачать

Конструкторы с параметрами

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

// Пример 12.4. Определение класса для работы с целыми числами.

// Нахождение суммы двух целых чисел.

// Использование конструктора с параметрами.

#include <iostream>

using namespace std;

class Chisla{ // определение класса Chisla

int a, b; // число a, b

public:

Chisla(int x, int y){ a = x; b = y;} // конструктор с параметрами

int sum(){return a + b;} // функция суммы чисел

void show(); // функция вывода чисел

};

void Chisla::show(){

cout<<"a = "<<a<<" b = "<<b<<endl;

}

int main(){ // функция main()

int n, m; cout<<"vvedi 2 chisla: "; cin>>n>>m;

Chisla ob(n, m); // объект ob класса Chisla

ob.show(); int s = ob.sum(); // вызов функций show() и sum()

cout<<"summa = "<<s <<endl;

system("pause");

}

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

Если в классе не определено ни одного конструктора, компилятор сгенерирует для класса конструктор по умолчанию вида:

Samp::Samp(){} // неявный конструктор по умолчанию

Данный конструктор инициализирует все данные объекта значениями по умолчанию. Если же в классе определён конструктор, следует в случае необходимости, задать конструктор по умолчанию явно:

Samp::Samp(){a = n;} // явный вид конструктора по умолчанию

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

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

Samp::Samp(int n = 0, int b = 0){a = n; b = m;}

Такой конструктор может вызываться и с параметрами и без параметров.

Конструктор по умолчанию– это конструктор, который не имеет параметров или у которого все параметры заданы как аргументы по умолчанию. Класс может иметь только один конструктор по умолчанию. Если класс не имеет ни одного конструктора, то компилятор, если надо, сгенерируетнеявныйконструктор по умолчанию сам.

// Пример 12.5. Определение класса для вычисления объёма куба.

// Использование конструктора с аргументамипо умолчанию.

#include <iostream>

using namespace std;

class Cub{ // определение класса Cub

int len, wid, hei;

public:

Cub(int le = 1, int wi = 1, int he = 1); // конструктор по умолчанию

void show(){cout<<endl<<len<<' '<<wid<<' '<<hei;}

int volum(){return len * wid * hei;}

};

Cub::Cub(int le, int wi, int he){

len = le ; wid = wi; hei = he;

}

int main(){

Cub ob1, ob2(3), ob3(5, 4, 3);

ob1.show(); cout<<" v = "<<ob1.volum(); // 1 1 1 v = 1

ob2.show(); cout<<" v = "<<ob2.volum(); // 3 1 1 v = 3

ob3.show(); cout<<" v = "<<ob3.volum()<<endl; // 5 4 3 v = 60

system("pause");

}

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

Конструкторы в С++ можно перегружать, чтобы обеспечить множество начальных значений для инициализации объектов класса.

// Пример 12.6. Перегрузка конструктора для случая инициализации объекта

// явно указанными значениями и значениями, заданными по умолчанию.

#include<iostream>

using namespace std;

class Samp{ // определение класса Samp

int x, y;

public:

Samp(){x = rand() % 20; y = rand() % 20;}

Samp(int m, int n){x = m; y = n;}

void show();

};

void Samp::show(){

cout<<x<<' '<<y<<endl;

}

int main(){

int a, b;

cout<<"vvedi a, b :"; cin>>a>>b;

srand(a+b);

Samp ob1(a, b); // объект с явной инициализацией

Samp ob2; // объект без явной инициализации

ob1.show();

ob2.show();

system("pause");

}