Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
С++ - ООП.doc
Скачиваний:
11
Добавлен:
21.09.2019
Размер:
399.87 Кб
Скачать

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

Для инициализации элементов объекта определенными конкретными значениями можно использовать конструктор с параметрами. Еще раз модифицируем класс queue, добавив в него новую переменную id и еще один конструктор. Конструктор с параметрами называется конструктор инициализации (initialized constructor) или основной конструктор. Конструктор инициализации будет иметь один параметр, который будет передаваться переменной id и эта переменная будет идентификатором объекта. Конструктор по умолчанию будет присваивать ей значение 0.

Рассмотрим пример, опять использую класс queue, немного его изменив:

class queue {

protected:

int q[100];

int sloc,rloc;

int id; // идентификатор объекта

public:

queue(void); // конструктор по умолчанию

queue(int i); // конструктор инициализации

~queue(void); // деструктор

void qput(int); // прототипы

int qget(void); // функций

};

Переменная id будет содержать значение параметра, идентифицирующего объект. Он будет определен при создании объекта типа queue. Перепишем конструктор по умолчанию в следующем виде:

queue::queue(void)

{

rloc=sloc=id=0;

cout<<”\n конструктор по умолчанию очереди queue ”<<id<<endl;

}

Конструктор инициализации напишем в виде:

queue::queue(int i)

{

rloc=sloc=0;

id=i;

cout<<”\n конструктор инициализации очереди queue ”<<id<<endl;

}

Для передачи значения параметра при объявлении объекта в С++ существует два способа:

Первый способ:

queue a=queue(101);

Это объявление объекта a типа queue и передача значения 101 в это объект. Редко используемая форма, второй способ – более короткая форма:

queue a(101);

Общая форма передачи аргумента конструктора следующая:

class_type переменная (список-аргументов);

Пример использования конструкторов с параметром и перегруженных конструкторов.

#include <iostream.h>

#include <conio.h>

class queue

{

int q[100];

int sloc,rloc;

int id; // это значение будем определять

public:

queue(void); // конструктор по умолчанию

queue(int i); // конструктор инициализации

~queue(void); // деструктор

void qput(int); // прототип

int qget(void); // прототип

};

queue::queue(void)

{

rloc=sloc=id=0;

cout<<"Конструктор по умолчанию очереди"<<id<<"\n";

}

queue::queue(int i)

{

rloc=sloc=0;

id=i;

cout<<"Конструктор инициализации очереди"<<id<<"\n";

}

queue::~queue(void)

{

cout<<"Очередь "<<id<<" разрушена\n";

}

int queue::qget(void)

{

I f (sloc==rloc)

{

cout<<"\n Очередь пуста\n";

return 0;

}

return q[rloc++];

}

void queue::qput(int i)

{

if (sloc==100)

{

cout<<"\n Очередь полна\n";

return;

}

q[sloc++]=i;

}

void main(void)

{

queue a=queue(101), b(102), c; // Объявление объектов

a.qput(10);

b.qput(19);

a.qput(20);

b.qput(1);

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

c.qput(200+i);

cout<<a.qget()<<" ";

cout<<a.qget()<<" ";

cout<<b.qget()<<" ";

cout<<b.qget()<<"\n";

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

cout<<c.qget()<<" ";

cout<<"\n";

getch();

}

Результат работы программы

Конструктор инициализации очереди 101

Конструктор инициализации очереди 102

Конструктор инициализации очереди 0

10 20 19 1

200 201 202

Очередь 0 разрушена

Очередь 102 разрушена

Очередь 101 разрушена

Конструктор может иметь несколько параметров разного типа

#include <iostream.h>

class c1

{

int i;

float j;

public:

c1(int a, float b);

void show(void);

};

c1::c1(int a,float b)

{

i=a;

j=b;

}

void c1::show(void)

{

cout<<”i=”<<i<<” j=”<<j<<endl;

}

void main(void)

{

c1 x(1,2.1),y(3,4),z(100,101.1);

x.show();

y.show();

z.show();

}