Объектно-ориентированное программирование на С++ - eDrive
Объектно-ориентированное программирование на С++ - eDrive Объектно-ориентированное программирование на С++ - eDrive
106 перегружается в бинарный, префиксный – в постфиксный и т.п. Операторы «+», «–», «*», «&» могут быть как бинарными, так и унарными. Перегружаются только опеpатоpы в операциях, для которых по крайней мере один из параметров является членом структуры или класса. С учетом неявного указателя this, при выполнении одноместных операций аргумент может опускаться, а в двухместных операциях допустимо оставлять один аргумент. Для знакомства с перегрузкой одноместных операторов рассмотрим одну из распространенных задач программирования – вывод текущего времени на экран. На основании показаний системных часов компьютера такая программа формирует на экране время в днях, часах и минутах. Чтобы в каждом такте часов не пересчитывать время заново, здесь переопределен оператор инкремента, что позволяет использовать не абсолютный, а относительный отсчет времени: class VClock { private: __int64 total, secs, mins, hours, days; public: VClock (__int64 i); void Out (); VClock operator++ (); }; VClock::VClock (__int64 i) { total = i; secs = total % 60; mins = (total / 60) % 60; hours = (total / 3600) % 24; days = total / 86400L; } void VClock::Out () { ShowMessage (AnsiString (total) + " сек.= " + AnsiString (days) + " дн. " + AnsiString (hours) + " час. " + AnsiString (mins) + " мин. " + AnsiString (secs) + " сек. "); } VClock VClock::operator++ () { VClock temp (++total); secs = temp.secs; mins = temp.mins; hours = temp.hours; days = temp.days; return *this; } void MainVClock () { VClock t1 (59), t2 (172799L);
} ShowMessage ("Старое время:"); t1.Out (); t2.Out (); ++t1; ++t2; ShowMessage ("Новое время:"); t1.Out (); t2.Out (); 107 // 0 дн. 0 час. 0 мин. 59 сек. // 1 дн. 23 час. 59 мин. 59 сек. // 0 дн. 0 час. 1 мин. 0 сек. // 2 дн. 0 час. 0 мин. 0 сек. Следующий пример посвящен операции транспонирования матрицы M[3][3], представленной элементом управления StringGrid1, для выполнения которой перегружается оператор «!»: class VMatr { int i, j; double temp; double M[3][3]; public: VMatr (); void Out (); VMatr operator ! (); }; VMatr::VMatr () { for (i=0; iCells [i][j] ); } void VMatr::Out () { for (i=0; iCells[i][j] = M[i][j]; } VMatr VMatr::operator! () { for (i=0; i
- 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 and 102: } 101 VList a (3); // констр
- Page 103 and 104: }; VStackAndQueue (AnsiString str);
- Page 105: }; 105 public: VSecond (AnsiString
- 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 />
ShowMessage ("Старое время:");<br />
t1.Out ();<br />
t2.Out ();<br />
++t1; ++t2;<br />
ShowMessage ("Новое время:");<br />
t1.Out ();<br />
t2.Out ();<br />
107<br />
// 0 дн. 0 час. 0 мин. 59 сек.<br />
// 1 дн. 23 час. 59 мин. 59 сек.<br />
// 0 дн. 0 час. 1 мин. 0 сек.<br />
// 2 дн. 0 час. 0 мин. 0 сек.<br />
Следующий пример посвящен операции транспонирования матрицы<br />
M[3][3], представленной элементом управления StringGrid1, для выполнения<br />
которой перегружается оператор «!»:<br />
class VMatr {<br />
int i, j;<br />
double temp;<br />
double M[3][3];<br />
public:<br />
VMatr ();<br />
void Out ();<br />
VMatr operator ! ();<br />
};<br />
VMatr::VMatr () {<br />
for (i=0; iCells [i][j] );<br />
}<br />
void VMatr::Out () {<br />
for (i=0; iCells[i][j] = M[i][j];<br />
}<br />
VMatr VMatr::operator! () {<br />
for (i=0; i