Выбрать главу

  int qget();

};

// Определение конструктора.

queue::queue()

{

 sloc = rloc = 0;

 cout << "Очередь инициализирована.\n";

}

// Определение деструктора.

queue::~queue()

{

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

}

Вот как выглядит новая версия программы реализации очереди, в которой демонстрируется использование конструктора и деструктора.

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

#include <iostream>

using namespace std;

// Определение класса queue.

class queue {

  int q[100];

  int sloc, rloc;

 public:

  queue(); // конструктор

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

  void qput(int i);

  int qget();

};

// Определение конструктора.

queue::queue()

{

 sloc = rloc = 0;

 cout << "Очередь инициализирована.\n";

}

// Определение деструктора.

queue::~queue()

{

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

}

// Занесение в очередь целочисленного значения.

void queue::qput(int i)

{

 if(sloc==100) {

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

  return;

 }

 sloc++;

 q[sloc] = i;

}

// Извлечение из очереди целочисленного значения.

int queue::qget()

{

 if(rloc == sloc) {

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

  return 0;

 }

 rloc++;

 return q[rloc];

}

int main()

{

 queue a, b; // Создание двух объектов класса queue.

 a.qput(10);

 b.qput(19);

 a.qput(20);

 b.qput(1);

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

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

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

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

 return 0;

}

При выполнении этой программы получаются такие результаты.

Очередь инициализирована.

Очередь инициализирована.

10 20

19 1

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

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

Параметризованные конструкторы

Конструктор может иметь параметры. С их помощью при создании объекта членам данных (переменным класса) можно присвоить некоторые начальные значения, определяемые в программе. Это реализуется путем передачи аргументов конструктору объекта. В следующем примере мы усовершенствуем класс queue так, чтобы он принимал аргументы, которые будут служить идентификационными номерами (ID) очереди. Прежде всего необходимо внести изменения в определение класса queue. Теперь оно выглядит так.

// Определение класса queue.

class queue {

  int q[100];

  int sloc, rloc;

  int who; // содержит идентификационный номер очереди

 public:

  queue(int id); // параметризованный конструктор

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

  void qput(int i);

  int qget();

};

Переменная who используется для хранения идентификационного номера (ID) создаваемой программой очереди. Ее реальное значение определяется значением, передаваемым конструктору в качестве параметра id, при создании переменной типа queue. Конструктор queue() выглядит теперь следующим образом.