Объектно-ориентированное программирование на С++ - eDrive
Объектно-ориентированное программирование на С++ - eDrive Объектно-ориентированное программирование на С++ - eDrive
} 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
- Page 51 and 52: 51 При передаче в фу
- Page 53 and 54: 53 } // 0 1 Иванов 2 Петр
- Page 55 and 56: 55 void Info (TList *vl) { AnsiStri
- Page 57 and 58: Allocate (k[0], k[1], book1); Alloc
- Page 59 and 60: 59 else ShowMessage ("Такой ч
- Page 61 and 62: 61 for (rj=n.rbegin (); rj!=n.rend
- Page 63 and 64: int i, d[] = { 5, 2, 3, 8, 3, 1, 3
- Page 65 and 66: 22. Каков принцип де
- Page 67 and 68: StringGrid1->Cells[0][j] = myS[j].a
- Page 69 and 70: void Files2 () { AnsiString from =
- Page 71 and 72: void _ _fastcall TForm1::DelFromFil
- Page 73 and 74: 73 Фрагмент обработ
- Page 75 and 76: 75 отказ в доступе, EM
- Page 77 and 78: 77 //myApplication.cpp #include "my
- Page 79 and 80: 79 Для подключения н
- Page 81 and 82: 81 Управление созда
- Page 83 and 84: 83 Контрольные вопр
- Page 85 and 86: 85 для построения ма
- Page 87 and 88: 87 В C++Builder все подкл
- Page 89 and 90: 89 ODBC в папке Панель
- Page 91 and 92: void _ _fastcall TDBForm1::ConnectC
- Page 93 and 94: 93 Для подключения з
- Page 95 and 96: 95 Контрольные вопр
- Page 97 and 98: class VPC { private: int type; Ansi
- Page 99 and 100: 99 AnsiString result; VDeque *curso
- Page 101: } 101 VList a (3); // констр
- Page 105 and 106: }; 105 public: VSecond (AnsiString
- Page 107 and 108: } ShowMessage ("Старое вре
- Page 109 and 110: } 109 AnsiString temp; for (i=0; i
- Page 111 and 112: 111 }; int VPrice::operator > (cons
- Page 113 and 114: 113 void MainVVector () { VVector
- Page 115 and 116: 115 void MainVEqu() { // x + 4y = 9
- Page 117 and 118: 117 Виртуальные функ
- Page 119 and 120: 119 virtual Тип имяФункц
- Page 121 and 122: 121 7. В чем заключает
- Page 123 and 124: 123 • руководство си
- Page 125 and 126: 125 Предметный указа
- Page 127: 5 Валерий Михайлови
};<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