- •2. Інтегроване середовище розробки Delphi: призначення і загальний опис середовища
- •3. Загальна організація програми в Delphi
- •4. Деякі довідкові відомості для роботи у середовищі Delphi
- •Цикл (программирование)
- •[Править]Определения
- •[Править]Виды циклов [править]Безусловные циклы
- •[Править]Цикл с предусловием
- •[Править]Цикл с постусловием
- •[Править]Цикл с выходом из середины
- •[Править]Цикл со счётчиком
- •[Править]Совместный цикл
- •[Править]Досрочный выход и пропуск итерации
- •[Править]Досрочный выход из цикла
- •[Править]Пропуск итерации
- •[Править]Необходимость
- •[Править]Вложенные циклы
- •[Править]Циклы с несколькими охраняемыми ветвями [править]Цикл Дейкстры
- •[Править]Цикл «паук»
- •[Править]Интересные факты
- •3.1 Інкапсуляція
- •3.2 Класи, компоненти і об'єкти
- •3.3 Спадкоємство
- •3.4 Розробка класів
- •3.4.1 Оголошення базового класу
- •3.4.2 Конструктори і деструкції
- •3.4.3 Оголошення похідних класів
- •3.5 Поліморфізм
- •3.5.1 Віртуальні функції
- •3.5.2 Дружні функції
- •3.6.1 Компоненти
- •3.6.1.1 Оголошення компонентних класів
- •3.6.1.2 Оголошення властивостей
- •3.6.1.3 Оголошення обробників подій
- •3.6.1.4 Оголошення автоматизованих властивостей і методів
- •3.6.1.5 Швидкий виклик функцій
- •3.6.1.6 Розширені типи даних Delphi
3.4 Розробка класів
Класи розробляються для досягнення певної мети. Найчастіше програміст починає з нечітко обкресленої ідеї, яка поступово, у міру розробки проекту, поповнюється деталями. Іноді справа закінчується декількома класами, вельми схожими один на одного. Щоб уникнути подібного дублювання код в класах, слід розбити їх на дві частини, визначивши загальну частину в батьківському класі, а що відрізняються залишити в похідних.
Оголошення класу повинне передувати його використанню. Як правило, прикладний програміст користується готовими базовими класами, причому йому зовсім не обов'язково розбиратися у всіх специфікаціях і у внутрішній реалізації. Проте, щоб використовувати базовий клас C++, треба обов'язково знати які члени даних і методи вам доступні (а якщо застосовується компонент C++Builder - властивості, що ще надаються, і події).
3.4.1 Оголошення базового класу
C++Builder дає вам можливість оголосити базовий клас, який інкапсулює імена своїх властивостей, даних, методів і подій. Окрім здатності виконувати своє безпосереднє завдання об'єктні методи отримують певні привілеї доступу до значень властивостей і даних класу.
Кожне оголошення усередині класу визначає привілей доступу до імен класу залежно від того, в якій секції ім'я з'являється. Кожна секція починається з одного з ключових слів: private, protected і public. Лістинг 3.1 ілюструє узагальнений синтаксис оголошення базового класу.
class className
private:
<приватні члени даних> <приватні конструктори> <приватні методи>
protected:
<захищені члени даних> <захищені конструктори> <захищені методи>
public:
<загальнодоступні властивості> <загальнодоступні члени даних> <загальнодоступні конструктори> <загальнодоступна деструкція> <загальнодоступні методи>
Лістинг 3.1. Оголошення базового класу.
Таким чином, оголошення базового класу на C++ надає наступні права доступу і відповідні зони видимості:
• Приватні private імена мають найбільш обмежений доступ, дозволений тільки методам даного класу. Доступ похідних класів до приватних методів базових класів заборонений.
• Захищені protected імена мають доступ, дозволений методам даного і похідних від нього класів.
• Загальнодоступні public імена мають необмежений доступ, дозволений методам всіх класів і їх об'єктів.
Наступні правила застосовуються при утворенні різних секцій оголошення класу:
1. Секції можуть з'являтися у будь-якому порядку, а їх назви можуть зустрічатися повторно.
2. Якщо секція не названа, компілятор вважає подальші оголошення імен класу приватними. Тут виявляється відмінність оголошень класу і структури - остання розглядається за умовчанням як загальнодоступна.
3. В міру можливості не поміщайте члени даних в загальнодоступну секцію, якщо тільки ви дійсно не хочете вирішити доступ до них звідусіль. Зазвичай їх оголошують захищеними, щоб вирішити доступ тільки методам похідних класів.
4. Використовуйте методи для вибірки, перевірки і установки значень властивостей і членів даних.
5. Конструктори і деструкції є спеціальними функціями, які не повертають значення і мають ім'я свого класу. Конструктор будує об'єкт даного класу, а деструкція його видаляє.
6. Методи (так само як конструктори і деструкції), які містять більше ніж одну інструкцію C++, рекомендується оголошувати поза класом.
Лістинг 3.2 представляє спробу наповнити оголошення базового класу деяким конкретним змістом. Відзначимо характерне для компонентних класів C++Builder оголошення властивості Count в захищеній секції, а методу SetCount, що реалізовує запис в член даних FCount, - в приватній секції.
class TPoint { private:
int FCount; // Приватний член даних void _fastcall SetCount(int Value);
protected:
_property int Count = // Захищена властивість
{ read= FCount, write=SetCount };
double x; // Захищений член даних
double у; // Захищений член даних public:
TPoint(double xVal double yVal); // Конструктор |
double getX(); |
double getY() ;
Лістинг 3.2. Оголошення базового компонента TPoint.
Оголошення і визначення методів зберігаються в різних файлах (з розширеннями .h і .срр, відповідно). Лістинг 3.3 показує, що коли методи визначаються поза класом, їх імена слід кваліфікувати. Синтаксис такої кваліфікації методу, що визначає його зону видимості, має наступний вигляд:
<ім'я класу>::<ім'я методу>
TPoint::TPoint(double xVal double yVal)
( // Тіло конструктора
void _fastcall TPoint::SetCount( int Value )
{
l
if ( Value i= FCount ) // Нове значення члена даних? {
FCount = Value; // Запис нового значення Update(); // Виклик методу Update } }double TPoint::getX()
// Тіло методу getX, кваліфікованого в класі ^TPoint
}
Лістинг 3.3. Визначення конструктора і методів поза класом.
Після того, як ви оголосили клас, його ім'я можна використовувати як ідентифікатор типу при оголошенні об'єкту цього класу (наприклад,
TPoint* MyPoint;).