Объектно-ориентированное программирование на С++ - eDrive
Объектно-ориентированное программирование на С++ - eDrive Объектно-ориентированное программирование на С++ - eDrive
96 class имяКласса { [Метка] [объявлениеЧленов…] [встроенноеОпределениеЧленов…] }; Если не дается встроенное определение, в файле кода модуля приводится внешнее определение членов: Тип имяКласса :: имяЧлен-данного [ =Значение]; Тип имяКласса :: имяЧлен-функции телоЧлен-функции Использование внешних определений повышает наглядность текста программы и облегчает его последующую модификацию. Члены класса могут принадлежать к другим классам, и их именуют в этом случае вложенными классами. Глубина вложенности не ограничивается, хотя «большое число уровней абстракции так же плохо, как и их отсутствие» [5]. После объявления и определения создаются объекты класса. Каждый класс может использоваться для порождения множества объектов: имяКласса имяОбъекта; имяКласса *имяОбъекта = new имяКласса; Инициализация и обращение к членам класса выполняются по разнообразным схемам. Обращение к членам своего класса производится по именам, без указания имени объекта: имяЧлена [= Значение]; При этом адресация выполняется с помощью неявного аргумента this. Так как this – адрес, то конструкция this–>имяЧлена является указателем на объект, а *this представляет сам объект: this–>имяЧлена [= Значение]; (*this).имяЧлена [= Значение]; При обращении к членам других классов следует указывать имя объекта: имяОбъекта.имяЧлена [= Значение]; ссылкаНаОбъект–>имяЧлена [= Значение]; Пусть, например, требуется периодически выводить информацию о компьютерах. Чтобы не делать это в каждой функции некоторой программы, в проекте удобно создать новый модуль (File.New .Unit), и в его файле заголовка объявить класс VPC, получающий сведения через функцию Set и представляющий их функцией Out, как это показано в следующем примере:
class VPC { private: int type; AnsiString firm; public: double price; void Set (int a, AnsiString b) { type = a; firm = b; } void Out () { ShowMessage ("Пpоцессор фирмы " + firm + " стоит $" + price); } }; 97 Для создания объектов класса в других формах, в их файлах кода размещаются ссылки на файл заголовка класса VPC. Ниже приведен пример функции MainVPC, «воспользовавшейся услугами» класса VPC для обработки объекта myCPU, и таких функций может быть множество: void MainVPC () { AnsiString company = "Acer"; VPC myCPU; myCPU.Set (6, company); myCPU.price = 100; myCPU.Out (); } Другой пример посвящен классу VIntegral, реализующему численное интегрирование тремя методами: методом прямоугольников, методом трапеций и методом парабол. Класс объявлен в файле заголовка модуля, его членфункции Rect, Trap, Para определены в файле кода модуля, а объекты созданы функцией MainVIntegral в файле кода формы: class VIntegral { double j, x, sum, sum1, f; public: void Rect (double, double, double, double (*fnc) (double, double)); void Trap (double, double, double, double (*fnc) (double, double)); void Para (double, double, double, double (*fnc) (double, double)); }; void VIntegral :: Rect (double xk, double h, double f, double (*fnc) (double x, double y)) { for (x=0, sum=0; x
- Page 45 and 46: } 45 for (int i=1; i=0 + 1; - -j) i
- Page 47 and 48: 47 нять, создавать с
- Page 49 and 50: lb->LoadFromFile (“1.txt”); Sho
- 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: 95 Контрольные вопр
- 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 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 Валерий Михайлови
96<br />
class имяКласса {<br />
[Метка]<br />
[объявлениеЧленов…]<br />
[встроенноеОпределениеЧленов…] };<br />
Если не дается встроенное определение, в файле кода модуля приводится<br />
внешнее определение членов:<br />
Тип имяКласса :: имяЧлен-данного [ =З<strong>на</strong>чение];<br />
Тип имяКласса :: имяЧлен-функции телоЧлен-функции<br />
Использование внешних определений повышает <strong>на</strong>глядность текста программы<br />
и облегчает его последующую модификацию. Члены класса могут<br />
при<strong>на</strong>длежать к другим классам, и их именуют в этом случае вложенными<br />
классами. Глуби<strong>на</strong> вложенности не ограничивается, хотя «большое число<br />
уровней абстракции так же плохо, как и их отсутствие» [5].<br />
После объявления и определения создаются объекты класса. Каждый<br />
класс может использоваться для порождения множества объектов:<br />
имяКласса имяОбъекта;<br />
имяКласса *имяОбъекта = new имяКласса;<br />
Инициализация и обращение к чле<strong>на</strong>м класса выполняются по разнообразным<br />
схемам. Обращение к чле<strong>на</strong>м своего класса производится по име<strong>на</strong>м,<br />
без указания имени объекта:<br />
имяЧле<strong>на</strong> [= З<strong>на</strong>чение];<br />
При этом адресация выполняется с помощью неявного аргумента this.<br />
Так как this – адрес, то конструкция this–>имяЧле<strong>на</strong> является указателем <strong>на</strong><br />
объект, а *this представляет сам объект:<br />
this–>имяЧле<strong>на</strong> [= З<strong>на</strong>чение];<br />
(*this).имяЧле<strong>на</strong> [= З<strong>на</strong>чение];<br />
При обращении к чле<strong>на</strong>м других классов следует указывать имя объекта:<br />
имяОбъекта.имяЧле<strong>на</strong> [= З<strong>на</strong>чение];<br />
ссылкаНаОбъект–>имяЧле<strong>на</strong> [= З<strong>на</strong>чение];<br />
Пусть, <strong>на</strong>пример, требуется периодически выводить информацию о<br />
компьютерах. Чтобы не делать это в каждой функции некоторой программы,<br />
в проекте удобно создать новый модуль (File.New .Unit), и в его файле заголовка<br />
объявить класс VPC, получающий сведения через функцию Set и представляющий<br />
их функцией Out, как это показано в следующем примере: