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

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

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

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

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, как это показано в следующем примере:

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

Saved successfully!

Ooh no, something went wrong!