Объектно-ориентированное программирование на С++ - eDrive

Объектно-ориентированное программирование на С++ - eDrive Объектно-ориентированное программирование на С++ - eDrive

edrive.narod.ru
from edrive.narod.ru More from this publisher
13.01.2015 Views

} 102 VMatrix second (M, 5); // инициализируем значением 5 second.Out (); // 6,7,8, 9,10,11, 12,13,14 Процесс освобождения памяти после уничтожения объектов можно сопровождать деструктором (destructor) – бестиповым открытым методом без параметров, имя которого совпадает с именем класса и имеет префикс ~ (тильда). Деструктор всегда вызывается автоматически, то есть неявно, при выходе из блока, в котором был объявлен объект. Он также включается при вызове оператора delete для указателя на объект, имеющий деструктор, или в том случае, когда необходимо удалить объект, вложенный в удаляемый. В любом случае работа деструктора сопровождает процесс освобождения памяти, выделенной конструктором. Каждый класс имеет только один деструктор, причем всегда открытый и без параметров. За работой деструктора можно понаблюдать в следующем примере: class VPair { int first, second; public: VPair (int one, int two): first (one), second (two) { ShowMessage ("Объект создан"); } ~VPair () { ShowMessage ("Объект удален"); } void Out () { ShowMessage (AnsiString (first) + '\n' + AnsiString (second)); } }; void MainVPair () { { VPair num (2,3); // объект создан num.Out (); // 2-3 } // объект удален { VPair num (4,5); // объект создан num.Out (); // 4-5 } // объект удален } За освобождением памяти можно наблюдать и без деструктора. В приведенной ниже реализации объектов str, поочередно помещаемых в стек и очередь, деструктора нет: class VStackAndQueue { char *s; int i, size, top; AnsiString result; public:

}; VStackAndQueue (AnsiString str); void Push (AnsiString str); void PopStack (); void PopQueue (); int Empty () { return top == –1; } int Full () { return top == size; } 103 VStackAndQueue::VStackAndQueue (AnsiString str) { size = str.Length (); s = new char[size]; top = –1; result = str + ":\n"; } void VStackAndQueue::Push (AnsiString str) { for (i = 1; i

};<br />

VStackAndQueue (AnsiString str);<br />

void Push (AnsiString str);<br />

void PopStack ();<br />

void PopQueue ();<br />

int Empty () { return top == –1; }<br />

int Full () { return top == size; }<br />

103<br />

VStackAndQueue::VStackAndQueue (AnsiString str) {<br />

size = str.Length (); s = new char[size]; top = –1; result = str + ":\n";<br />

}<br />

void VStackAndQueue::Push (AnsiString str) {<br />

for (i = 1; i

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!