русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Конструкторы и деструкторы


Дата добавления: 2013-12-23; просмотров: 911; Нарушение авторских прав


Перед использованием объекта может потребоваться инициализировать некоторые его данные. Для примера рассмотрим класс queue, определенный выше в этой главе. Перед тем как использо­вать queue, необходимо присвоить переменным r и s значения 0, используя функцию init(). Поскольку требование инициализации является чрезвычайно распространенным, то C++ позво­ляет производить инициализацию объектов во время их создания. Такая автоматическая иници­ализация выполняется с помощью функции, которая называется конструктором.

Функция-конструктор, являющаяся членом класса и имеющая имя, совпадающее с именем класса, представляет собой специальный тип функции. В качестве примера ниже показано, как выглядит класс queue, преобразованный таким образом, чтобы использовать для инициализации конструктор:

class queue

{

int q[100];

int s, r;

public:

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

void put(int i);

int get();

};

Обратим внимание, что конструктор queue() не имеет типа возвращаемого значения. В C++ фун­кции-конструкторы не могут возвращать значений.

Код, реализующий функцию queue(), выглядит следующим образом:

queue::queue()

{

s = r = 0;

cout << "Queue initialized.\n";

}

Обратим внимание, что выводимое сообщение «queue initialized» служит для иллюстрации рабо­ты конструктора. В обычной практике конструкторы не занимаются выводом или вводом данных. Они служат для инициализации.

Конструктор объекта вызывается автоматически при создании объекта. Это означает, что он вызывается тогда, когда происходит объявление объекта. В этом заключается важнейшее разли­чие между объявлениями в языке Си и в C++. В С объявления переменных, попросту говоря, являются пассивными и в большинстве случаев выполняются во время компиляции. Иными слова­ми, в языке С объявления переменных не являются исполняемыми инструкциями. В отличие от этого в C++ объявления переменных служат активными инструкциями, исполняемыми по суще­ству во время работы программы. Одна из причин этого заключается в том, что объявление объекта может требовать вызова конструктора, то есть вызывать выполнение функции. Хотя это различие может показаться едва уловимым и носить больше академический характер, как будет видно да­лее, оно может оказывать существенное влияние на инициализацию переменных.



При инициализации глобальных или статических объектов конструктор вызывается только один раз. Для локальных объектов конструктор вызывается всякий раз, когда управление доходит до объявления объекта.

Дополнением конструктора является деструктор. Во многих случаях перед уничтожением объекта необходимо выполнить определенные действия. Локальные объекты создаются при входе в соот­ветствующий блок программы и разрушаются при выходе из него. Глобальные объекты уничто­жаются при завершении работы программы. Имеется много причин тому, чтобы существовал деструктор. Например, может потребоваться освободить память, которая была ранее выделена. В C++ за дезактивацию отвечает деструктор. Он имеет то же самое имя, что и конструк­тор, только к нему добавлен значок ~. Ниже представлен вариант класса queue, использующий конструктор и деструктор. (Следует иметь в виду, что класс queue не нуждается в деструкторе, поэтому ниже он приведен только для иллюстрации.)

class queue

{

int q[100];

int s, r;

public:

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

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

void put(int i);

int get();

};

queue::queue()

{

s = r = 0;

cout << "Queue initialized.\n";

}

queue::~queue()

{

cout << "Queue destroyed.\n";

}

void queue::put(int i)

{

if(s == 100)

{

cout << "Queue is full.\n";

return;

}

q[s++] = i;

}

int queue::get()

{

if(r == s)

{

cout << "Queue underflow.\n";

return 0;

}

return q[r++];

}

Для того чтобы продемонстрировать работу конструктора и деструктора, ниже представлена но­вая версия функции main():

int main()

{

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

a.put(10); a.put(20);

b.put(19); b.put(1);

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

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

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

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

return 0;

}

Эта программа выводит на экран следующий текст:

Queue initialized.

Queue initialized.

10 20 19 1

Queue destroyed.

Queue destroyed.

2.6 Ключевые слова языка С++

Borland C++ включает в себя все ключевые слова, определенные в языке С, и добавляет к ним ряд новых ключевых слов, показанных в таблице 2.1. Нельзя использовать ключевые слова в качестве имен переменных или функций.



<== предыдущая лекция | следующая лекция ==>
Наследование | Параметризованные конструкторы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.004 сек.