Программирование >>  Расширенная версия языка c++ 

1 ... 10 11 12 [ 13 ] 14 15 16 ... 227


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

инструкцией действия . При программировании на С инструкции объявления

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

Обратите внимание, как определяется конструктор Как уже гово-

рилось, он не имеет возвращаемого значения. В соответствии с формальными правилами синтаксиса C++ конструктор не должен иметь возвращаемого значения.

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

Функцией, обратной конструктору, является деструктор (destructor). Эта

функция вызывается при удалении объекта. Обычно при работе с объектом

в момент его удаления должны выполняться некоторые действия. Например, при создании объекта для него взделяется память, которую необходимо освободить при его удалении. Имя деструктора совпадает с именем класса, но с символов ~ (тильда) в начале. Пример класса с деструктором:

ttinclude <iostream> ;

using namespace std;

class myclass (

int a; public:

myclass (); конструктор

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

void showO ; i -. - .. .

myclass: :myclass( )

cout Содержимое конструитора\п ; a = 10;

int main (i

myclass сЬ; оЬ.show(); return 0;



myclass:;-myclassо

cout Удаление. . . \n ;

void myclass::show0

cout a \n ;

int main{) 1

myclass ob; о . .

ob.show t) ; .. , !

return 0;

Деструктор класса вызывается при удалении объекта. Локальные объекты удаляются тогда, когда они выходят из области видимости. Глобальные объекты: удаляются при завершении программы.

Адреса конструктора и деструктора получить невозможно.

Фактически как конструктор, так и деструктор могут выполнить любой тип операции. Тем не менее считается, что код внутри этих функций не должен делать ничего, не имеющего отношения к инициализации или возвращению объектов в исходное состояние. Например, конструктор в предшествующем примере мог бы рассчитать число pi с точностью до 100 знаков после запятой. Однако применение конструктора или деструктора для действий, прямо не связанных с инициализацией, является очень плохим стилем программирования и его следует избегать.

1р№ёры

1. Вспомните, что в созданном в главе 1 классе stack для установки переменной индекса стека требовалась функция инициализации. Это именно тот тип действия, для выполнения которого и придуман конструктор. Здесь представлена улучшенная версия класса stack, где для автоматической инициализации объекта стека при его создании используется конструктор:

ttinclude <iostreaiti> using namespace std;

ttdefine SIZE 10



Объявление класса stack для стволов class stack {

cha SIZE] ; содержит стек

int tos; индекс вершины стека public;

stack(); конструктор

voi ar ch); помещает в стек символ cha () ; выталкивает из стека свол

Инициализация стека

stack; ;stack()

cout конструктора стека

tos=0;

Помещение ствола в стек

void stack: : push (char ch)

cou Стек полон ; return;

stck[tos]=ch;

tos++; -

Выталкивание ствола из стека char stack::pop()

if (tos==0) {

cout Стек пуст ;

return 0; возврат нуля при пустом стеке

tos-;

return stck[tos];

образование двух автоматически инициализируемых стеков - stack si, s2; int i ;

si.push ( a) ; ... --. .

s2. push fx) ; sl.pushCb) ;



1 ... 10 11 12 [ 13 ] 14 15 16 ... 227

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика