Sizeof value 5 страница

Рис. 11.4. Корпоративний підхід до визначення зв'язків між
відділами і їх виробничими функціями

Співробітники кожного відділу виконують операції тільки з тими даними, які їм належать. Подібний поділ обов'язків дає змогу легко стежити за виробничою діяльністю компанії та контролювати її, а також підтримувати цілісність інформаційного простору компанії. Наприклад, бухгалтерія несе відповідальність за інформацію, що стосується нарахування заробітної плати, сплати податків, здійснення обліку матеріальних цінностей тощо. Якщо у менеджера з реалізації продукції виникне потреба дізнатися про загальний оклад співробітників компанії за місяць липень, то йому не потрібно йти в бухгалтерію і ритися в картотеках; йому достатньо послати запит компетентній особі, яка повинна знайти потрібну інформацію, обробити її та надати достовірну відповідь на запит. Така схема організації роботи дає змогу забезпечити правильне оброблення даних, а також здійснити їх захист від можливої дії сторонніх осіб. Подібну структуру зв'язків між відділами компанії та їх виробничими функціями зображено на рис. 11.4. Аналогічні об'єкти мають створити таку саму організацію програми, яка забезпечуватиме цілісність її даних, доступ до них і виконання над ними відповідних дій.

11.2.2. ООП – спосіб ефективної організації програми

ООП ніяк не пов'язане з процесом виконання програми, а є тільки способом її ефективної організації. Велика частина операторів мови C++ є аналогічною операторам процедурних мов програмування, зокрема мови С. Зовні функція класу у мові програмування C++ дуже схожа на звичайну функцію мови С, і тільки за контекстом програми можна визначити, чи є функція частиною структурної С-програми або об'єктно-орієнтованої програми, написаної мовою C++.

11.3. Основні компоненти об'єктно-орієнтованої мови програмування

Розглянемо декілька основних компонентів, що входять до складу будь-якої об'єктно-орієн­то­ва­ної мови програмування, насамперед мови C++: об'єкти, класи, успадкування, повторне використання коду програми, типи даних користувача, поліморфізм і перевантаження операторів тощо.

11.3.1. Поділ програми на об'єкти

Якщо Вам доведеться розв'язувати деяку виробничу задачу з використанням об'єктно-орієнтованого методу, то замість проблеми поділу програми на функції наштовхнетесь на проблему поділу її на об'єкти. Згодом Ви дізнаєтесь, що мислення в термінах об'єктів виявляється набагато простішим і наочним, ніж у термінах функцій, оскільки програмні об'єкти схожі з фізичними об'єктами реального світу. Більш детально дане питання буде розглянуто у розд. 24 "Формалізація процесу розроблення об'єктно-орієнтованого програмного забезпечення".

Тут ми дамо відповідь тільки на таке запитання: що у коді програми треба представляти у вигляді об'єктів? Остаточну відповідь на це запитання може дати тільки Ваш власний досвід програмування з використанням об'єктно-орієнтованого підходу, а також Ваше досконале знання фізичної сутності розв'язуваної задачі. Проте нижче наведено декілька прикладів, які можуть виявитися корисними як для початківців-студентів, так і для програмістів-нефахівців з ООП:

фізичні об'єкти: верстати та устаткування під час моделювання перебігу технологічного процесу виготовлення продукції; транспортні засоби під час моделювання процесу переміщення продукції; схемні елементи під час моделювання роботи ланцюга електричного струму; виробничі підприємства під час розроблення економічної моделі; літальні апарати під час моделювання диспетчерської системи тощо;

елементи інтерфейсу: вікна програми; меню користувача; графічні об'єкти (лінії, прямокутники, круги); миша, клавіатура, дискові пристрої, принтери тощо;

структури даних: масиви; стеки; пов'язані списки; бінарні дерева тощо;

групи людей: співробітники; студенти; покупці; продавці тощо;

сховища даних: описи обладнання та устаткування; відомості виготовленої продукції; списки співробітників; словники; географічні координати точок тощо;

типи даних користувача: час; довжини; грошові одиниці; величини кутів; комплексні числа; точки на площині чи у просторі;

учасники комп'ютерних ігор: автомобілі на перегонах; позиції в настільних іграх (шашки, шахи); тварини в іграх, пов'язаних з живою природою; друзі та вороги в пригодницьких іграх.

Відповідність між програмними і реальними об'єктами є наслідком об'єднання даних і відповідних їм функцій. Об'єкти, що отримуються внаслідок такого об'єднання, свого часу викликали фурор, адже жодна програмна модель, розроблена на основі структурного підходу, не відображала наявні речі так точно, як це вдалося зробити за допомогою об'єктів.

11.3.2. Визначення класу

Коли йдеться про об'єкти, то вважається, що вони є екземплярами класів. Щоце означає? Розглянемо таку тривіальну аналогію. Практично всі комп'ютерні мови мають стандартні типи даних; наприклад, у мові програмування C++ є цілий тип int. Ми можемо визначати змінні таких типів у наших програмах:

int day, count, divisor, answer;

За аналогією ми можемо визначати об'єкти класу, як це показано на рис. 11.5. Тобто, клас – це тип форми, що визначає, які дані та функції будуть включені в об'єкт. Під час оголошення класу не створюються ніякі об'єкти цього класу, за аналогією з тим, що існування типу int ще не означає існування змінних цього типу.

Рис. 11.5. Визначення класу і його об'єктів

Таким чином, визначальним для класу є тип сукупності схожих між собою об'єктів. Це відповідає нестрогому в технічному сенсі розумінню терміну "клас": наприклад, Prince, Sting і Madonna належать до класу музикантів. Не існує конкретної людини з іменем "рок-музикант", проте люди зі своїми унікальними іменами є об'єктами цього класу, якщо вони володіють певним набором характеристик. Об'єкт класу часто також називають екземпляром класу.

11.3.3. Поняття про успадкування в класах

Поняття класу приводить нас до поняття успадкування. У повсякденному житті ми часто маємо справу з поділом класів на підкласи: наприклад, клас тварини можна розбити на підкласи ссавці, земноводні, комахи, птахи і т.д. Клас наземний транспорт поділяється на класи автомобілі, вантажівки, автобуси, мотоцикли, автокрани іт.д.

Принцип, закладений в основу такого поділу, полягає в тому, що кожен підклас володіє властивостями, притаманними тому класу, з якого виділений даний підклас. Автомобілі, вантажівки, автобуси і мотоцикли мають колеса і двигун, що є характеристиками наземного транспорту. Окрім тих властивостей, які є загальними у даних класу і підкласу, підклас може мати і власні: наприклад, автобуси мають велику кількість посадкових місць для пасажирів, тоді як вантажівки володіють значним простором і потужністю двигуна для перевезення вантажів, негабариту, в т.ч. і інших машин. Ілюстрацію ідеї успадкування в класах наведено на рис. 11.6.

Подібно до наведеного вище класу наземного транспорту, у програмуванні клас також може породити множину підкласів. У мові програмування C++ клас, який породжує всю решту класів, називається базовим класом; решта класів успадковує його властивості, водночас, водночас мають власні характеристики. Такі класи називають похідними.

Рис. 11.6. Ілюстрація ідеї успадкування в класах

Не проводьте помилкових аналогій між відносинами "об'єкт-клас" і "базовий клас – похідний клас"! Об'єкти, що існують в пам'яті комп'ютера, є втіленням властивостей, притаманних класу, до якого вони належать. Похідні класи мають властивості як успадковані від базового класу, так і свої власні.

Успадкування можна вважати аналогом використання функцій в структурному підході. Якщо ми виявимо декілька функцій, що здійснюють схожі дії, то вилучимо з них однакові частини і винесемо їх у окрему функцію. Тоді початкові функції будуть однаковою мірою викликати свою загальну частину, і водночас у кожній з них міститимуться свої власні настанови. Базовий клас містить елементи, які є загальними для групи похідних класів. Значення успадкування в ООП таке ж саме, як і функцій у структурному програмуванні, – скоротити розмір коду і спростити зв'язки між елементами програми.

11.3.4. Повторне використання коду

Розроблений одного разу клас може бути використаний в інших програмах. Ця властивість називається повторним використанням коду. Аналогічну властивість в структурному програмуванні мають бібліотеки функцій, які можна вносити в різні програмні проекти.

У ООП концепція успадкування відкриває нові можливості повторного використання коду програми. Програміст може узяти наявний клас, і, нічого не змінюючи в ньому, додати до нього свої елементи. Всі похідні класи успадкують ці зміни, і водночас кожний з похідних класів можна модифікувати окремо.

Припустимо, що Ви розробили клас, який представляє систему меню, аналогічну графічному інтерфейсу Microsoft Windows або іншому графічному інтерфейсу користувача (GUI). Ви не хочете змінювати цей клас, але Вам необхідно додати можливість установки і зняття прапорців. У цьому випадку Ви створюєте новий клас, що успадковує всі властивості початкового класу, і додаєте до нього необхідний код програми.

Зручність повторного використання кодів уже написаних програм є важливою перевагою методу ООП над іншими методами. Багато компаній стверджують, що можливість вносити в нові версії програмного забезпечення коди програм старіших версій сприятливо позначається на їхніх прибутках, які приносять останні. Детальніше це питання розглядатиметься в інших розділах цього навчального посібника.

11.3.5. Поняття про типи даних користувача

Одним з достоїнств об'єктів є те, що вони дають користувачу можливість створювати свої власні типи даних. Уявіть собі, що Вам необхідно працювати з об'єктами, які мають дві координати, наприклад x і y. Вам хотілося б здійснювати звичайні арифметичні операції над такими об'єктами, наприклад:

pozition1 = pozition2 + origin;

де змінні pozition1, pozition2 і origin є наборами з двох координат. Описавши клас, що містить пару координат, і оголосивши об'єкти цього класу з іменами pozition1, pozition2 і origin, ми фактично створимо новий тип даних. У мові програмування C++ є засоби, що полегшують створення подібних типів даних користувача.

11.3.6. Поняття про поліморфізм і перевантаження операторів

Зверніть увагу на те, що операції присвоєння (=) і додавання (+) для типу pozition мають виконувати дії, що відрізняються від тих, які вони виконують для об'єктів стандартних типів, наприклад int. Об'єкти pozition1 та інші не є стандартними, оскільки визначені користувачем як такі, що належать до класу pozition. Як же оператори – і + розпізнають, які дії необхідно зробити над операндами? Відповідь на це запитання полягає в тому, що ми самі можемо задати ці дії, зробивши потрібні оператори методами класу pozition.

Використання окремо операцій і функцій залежно від того, з якими типами величин їм доводиться у даний момент працювати, називають поліморфізмом. Коли наявна операція, наприклад – або +, наділяється можливістю здійснювати дії над операндами нового типу, то вважається, що така операція є перевантаженою. Перевантаження є окремим випадком поліморфізму і є важливим інструментом ООП.

11.4. Співвідношення між мовами програмування C і С++

Мова програмування C++ успадкувала можливості мови С. Строго кажучи, мова C++ є розширенням мови С: будь-яка конструкція, написана мовою С, є коректною для мови C++; водночас зворотне твердження – невірне. Найбільш значні нововведення, присутні мові C++, стосуються класів, об'єктів і ООП (первинна назва мови C++ – "С з класами"). Проте є і інші удосконалення, пов'язані із способами організації введення/виведення і написання коментарів. Ілюстрацію співвідношення між мовами С і C++ наведено на рис. 11.7.

На практиці існує значно більше відмінностей між мови C і C++, ніж може видатися спочатку. Незважаючи на те, що мовою C++ можна написати коди програм такі ж самі як і мовою C, однак навряд чи комусь прийде в голову робити це так. Програмісти, які застосовують мову C++, не тільки користуються перевагами цієї мови перед мовою C, але і по-новому використовують її можливості, частина з яких успадкована від мови С. Якщо Ви знайомі з мовою С, то це означає, що у Вас вже є деякі знання відносно мови програмування C++, але ймовірніше за все, що значна частина матеріалу виявиться для Вас новою.

Рис. 11.7. Співвідношення між мовами C і C++

11.5. Вивчення основ створення об'єктно-орієнтованих програм

Наше завдання полягає в тому, щоб якнайшвидше навчити Вас створювати об'єктно-орієнтовані програми. Оскільки, як було вже сказано раніше, значна частина можливостей мови програмування C++ успадкована від її попередниці – мови С, то навіть при об'єктно-орієнто­ва­ній структурі програми її основу становлять "старомодні" процедурні засоби. Тому у розділах з 2 по 10 нами детально проаналізовано такі основні елементи мови програмування С++, як типи даних, настанови керування ходом виконання С++-програми, масиви та рядки як засоби для групування взаємопов'язаних між собою змінних, основи застосування покажчиків і функцій та розширення їх можливостей. Там само було розглянуто додаткову інформацію про типи даних і оператори, а також основна інформація про структури та об'єднання.

Якщо Ви вже знайомі з мовою С, все ж пам'ятайте про певні відмінності між мовами C і C++, які є очевидними, а також можуть бути непомітними при неуважному її вивченні. Тому ми радимо програмістам-нефахівцям з ООП нашвидкуруч проглянути той матеріал, який йому відомий, а основну увагу сконцентрувати на відмінностях між мовами C і C++.

Детальний розгляд основних положень ООП починається в розд. 12 "Введення в класи". Потім на конкретних прикладах вивчається робота з класами, перевантаження операторів і успадкування в класах, віртуальні функції та поліморфізм, шаблони в класах і оброблення виняткових ситуацій, С++-система введення-виведення, динамічна ідентифікація типів і оператори приведення типу, простір імен і інші ефективні програмні засоби, введення в стандартну бібліотеку шаблонів і особливості роботи препроцесора С++. У додатках наведено С-орієнтовану систему введення-виведення, особливості використання застарілого С++-компілятора, а також .NET-розширення для C++. Всі приклади, починаючи з цього розділу, матимуть об'єктно-орієнтовану структуру.

11.6. Поняття про універсальну мову моделювання

Універсальну мову моделювання (UML) можна умовно назвати графічною мовою, призначеною для моделювання структури комп'ютерних кодів програм. У програмуванні під моделюванням розуміють процес розроблення наочної візуальної інтерпретації будь-якого процесу, в т.ч. і структури програмного продукту. Окрім того, UML дає змогу створювати подібну інтерпретацію кодів програм високорівневої ієрархічної організації.

Родоначальниками UML стали три незалежні мови моделювання, розробниками яких були відповідно Граді Буч, Джеймс Рембо і Івар Джекобсон. У кінці 90-х років ХХ ст. вони об'єднали свої розробки, внаслідок чого отримали продукт під назвою універсальна мова моделювання (UML), яка була схвалена OMG консорціумом компаній, що визначають промислові стандарти.

Яка ж основна необхідність використання UML під час створення сучасного програмного продукту? По-перше, часто буває важко встановити взаємовідносини між частинами великої програми за допомогою тільки безпосереднього аналізу її коду. Як уже зазначалося раніше, ООП є прогресивнішим, ніж структурне. Але навіть при цьому підході для того, щоб розібратися в конкретних функціональних діях сучасного програмного продукту, необхідно, як мінімум, уявляти собі зміст її програмного коду.

Проблема аналізу коду програми полягає в тому, що він є дуже деталізованим. Набагато простіше було б поглянути на його загальну структуру, яка відображає тільки основні частини програми і їх взаємодію. UML забезпечує таку можливість.

Найбільш важливим засобом UML є набір різних видів діаграм. Діаграми класів ілюструють відносини між різними класами, діаграми об'єктів – між окремими об'єктами, діаграми зв'язків відображають зв'язки між об'єктами у часі і т.д. Усі ці діаграми, по суті, відображають погляди на структуру програми і її функціонування з різних точок зору.

Окрім ілюстрації структури коду програми, UML має немало інших корисних можливостей. У розд. 24 йдеться про те, як за допомогою UML можна розробити первинну структуру коду програми. Фактично UML можна використовувати на всіх етапах реалізації проекту – від усвідомлення та аналізу завдання, розроблення та відлагодження програми до документування, тестування і підтримки.

Проте не варто розглядати UML як засіб розроблення програмного продукту. UML є тільки засобом для ілюстрації проекту, що розробляється. Незважаючи на можливість застосування UML до будь-якої мови програмування, однак вона є найбільш корисною під час застосування об'єктно-орієнтованого програмування мовою С++.

* * *

ООП є способом організації коду програми. Основну увагу під час його вивченні приділено організації програми, а не питанням написання коду програми. Головним компонентом об'єктно-орієнтованого коду програми є об'єкт, який містить дані та функції для їх оброблення. Клас є формою або зразком для визначення множини схожих між собою об'єктів.

Механізм успадкування дає змогу створювати нові класи на основі наявних класів, не вносячи змін у останні. Породжений клас успадковує всі дані та функції свого попередника, але має також і свої власні дані та функції. Успадкування уможливлює повторне використання коду програми, тобто внесення одного разу розробленого класу в будь-які інші коди програм.

Мову програмування C++ створено внаслідок розширення мови С, що дає змогу реалізувати концепцію ООП, а також містить деякі додаткові можливості. Частина засобів мови С, незважаючи на їх підтримку мови C++, визнано застарілими в контексті нових підходів до програмування і тому вживається рідко, як правило, замінюючись новішими засобами мови C++. Внаслідок цього відмінності між мовами С і C++ значніші, ніж здається на перший погляд.

Універсальна мова моделювання (UML) є стандартизованим засобом візуалізації структури і функціонування коду програми за допомогою діаграм.

Ідеї, що розглядалися в цьому розділі, конкретизуються у міру вивчення ООП мовою C++. Можливо, в процесі ознайомлення з іншими розділами цього навчального посібника Ви відчуєте необхідність повернутися до матеріалу, викладеного в цьому або попередніх розділах.


Розділ 12. Введення в класи

У цьому розділі ми познайомимося з класом. Клас – це фундамент С++-підтримки ООП, а також ядра багатьох складніших програмних засобів. Клас – це базова одиниця інкапсуляції, яка забезпечує механізм побудови об'єктів.

12.1. Базові поняття класу

Клас визначає новий тип даних, який задає формат об'єкта. Клас містить як дані, так і програмні коди, призначені для виконання дій над цими даними. Отже, клас пов'язує дані з програмними кодами. У мові програмування C++ специфікацію класу використовують для побудови об'єктів. Об'єкти – це примірники класу. По суті, клас є набором планів, які вказують на властивості та визначають поведінку об'єкта. Важливо розуміти, що клас – це логічна абстракція, яка реально не існує доти, доки не буде створено об'єкт цього класу, тобто це те, що стане фізичним представленням цього класу в пам'яті комп'ютера.

Об'єктно-орієнтоване програмування побудоване на понятті класу.

Визначаючи клас, оголошуються дані, які він містить, і програмні коди, які виконуватимуться над цими даними. Хоча інколи прості класи можуть містити тільки програмні коди або тільки дані, проте більшість реальних класів містять обидва компоненти. У класі дані оголошуються у вигляді змінних, а програмні коди оформляються у вигляді функцій. Функції та змінні, що утворюють клас, називаються його членами. Таким чином, змінну, оголошену в класі, називають членом даних, а функцію, оголошену в класі, – функцією-членом. Іноді замість терміна член даних класу використовують термін змінна примірника (або змінна реалізації), а замість терміна функція-член класу використовують термін метод класу.

Оголошення класу починається з ключового слова class.

Оголошення класу синтаксично є подібним до оголошення структури. Загальні формати оголошення класу мають такий вигляд:

Варіант 1 Варіант 2
class ім'я_класу { закриті дані та функції public: відкриті дані та функції } список_об'єктів_класy; class ім'я_класу { закриті дані та функції public: відкриті дані та функції }; ім'я_класу список_об'єктів_класy;

Тут елемент ім'я_класу означає ім'я "класового" типу. Воно стає ім'ям нового типу, яке можна використовувати для побудови нових об'єктів класу. Об'єкти класу можна створити шляхом вказання їх імен безпосередньо за закритою фігурною дужкою оголошення класу як елемент список_об'єктів_класу (варіанти 1). Після оголошення класу його об'єкти можна створювати в міру потреби (варіант 2).

Наприклад, так клас визначає тип chergaClass, який призначено для реалізації черги[43]:

class chergaClass { // Оголошення класового типу

int qpMas[100];

int sloc, rloc;

public:

void init(); // Ініціалізація класу chergaClass.

void putQp(int izm); // Введення в чергу значення.

int getQp(); // Виведення з черги значення.

};

Розглянемо детально механізм визначення цього класу.

Усі члени класу chergaClass оголошені в тілі настанови class. Членами даних класу chergaClass є змінні qpMas[], sloc і rloc. Окрім того, тут визначено три функції-члени: init() – ініціалізація класу, putQp() – введення в чергу значення і getQp() – виведення з черги значення.

За замовчуванням члени класу є закритими (private-членами).

Будь-який клас може містити як закриті, так і відкриті члени. За замовчуванням усі члени, визначені в класі, є закритими. Наприклад, змінні qpMas[], sloc і rloc є закритими. Це означає, що до них можуть отримати доступ тільки інші функції-члени класу chergaClass; ніякі інші частини програми цього зробити не можуть. У цьому полягає один з проявів інкапсуляції: програміст повною мірою може керувати доступом до певних елементів даних. Закритими можна оголосити і функції (у наведеному прикладі таких немає), внаслідок чого їх зможуть викликати тільки інші члени цього класу.

Ключове слово public використовують для оголошення відкритих членів класу.

Щоб зробити члени класу відкритими (тобто доступними для інших частин програми), необхідно визначити їх після ключового слова public. Усі змінні або функції, визначені після специфікатора public, є доступними для всіх інших функцій програми, в тому числі і функції main(). Отже, в класі chergaClass функції init(), putQp() і getQp() є відкритими. Зазвичай у програмі організовується доступ до закритих членів класу через його відкриті функції. Звернемо Вашу увагу на те, що після ключового слова public знаходиться двокрапка.

Варто знати! Об'єкт утворює свого роду зв'язки між кодами програми і її даними. Так, будь-яка функція-член класу має доступ до закритих елементів класу. Це означає, що функції init(), putQp() і getQp() мають доступ до змінних qpMas[], sloc і rloc. Щоб додати будь-яку функцію в клас, необхідно оголосити її прототип в оголошенні цього класу, після чого вона стає функцією-членом класу.

Оголосивши клас, можна створити об'єкт цього "класового" типу, якщо використати ім'я класу. Таким чином, ім'я класу стає специфікатором нового типу. Наприклад, у процесі виконання такої настанови створюється два об'єкти A_ob і B_ob типу chergaClass:

chergaClass A_ob, B_ob; // Створення об'єктів класу

Після створення кожен об'єкт класу набуває власну копію членів-даних, які утворюють клас. Це означає, що кожний з об'єктів A_ob і B_ob матиме власні копії змінних qpMas[], sloc і rloc. Отже, дані, пов'язані з об'єктом A_ob, відокремлені (ізольовані) від даних, які є пов'язані з об'єктом B_ob.

Щоб отримати доступ до відкритого члена класу через об'єкт цього класу, використовують оператор "крапка" (саме так це робиться і під час роботи із структурами). Наприклад, щоб вивести на екран значення змінної sloc, яка належить об'єкту A_ob, використовують таку настанову:

cout << " A_ob.sloc= " << A_ob.sloc;

Необхідно пам'ятати. У мові програмування C++ клас створює новий тип даних, який можна використовувати для побудови об'єктів. Зокрема, клас створює логічну конструкцію, яка визначає відносини між її членами – даними і кодами функцій. Оголошуючи так звану змінну класу, ми створюємо об'єкт, який фізично існує і є конкретним примірником класу[44]. Понад це, кожен об'єкт класу має власну копію даних, визначених у цьому класі.

У оголошенні класу chergaClass містяться прототипи функцій-членів класу. Щоб реалізувати код функції, яка є членом класу, необхідно повідомити компілятор, до якого класу вона належить, кваліфікувавши ім'я цієї функції з іменем відповідного класу. Наприклад, ось як можна записати код функції putQp():

// Введення в чергу значення.

void chergaClass::putQp(int izm)

{

if(sloc == 100) {

cout << "Черга заповнена.\n";

return;

}

sloc++;

qpMas[sloc]= izm;

}

По суті, такий запис повідомляє компілятор, що дана версія функції putQp() належить класу chergaClass. Іншими словами, оператор дозволу "::" заявляє про те, що функція putQp() знаходиться у області видимості класу chergaClass. Різні класи можуть використовувати однакові імена функцій. Компілятор самостійно визначить, до якого класу належить та чи інша функція за допомогою імені класу та оператора дозволу області видимості.

Оператор дозволу області видимості "::" кваліфікує ім'я члена разом з іменем його класу.

Функції-члени класу можна викликати тільки зі своїми об'єктами. Щоб викликати функцію-члена з частини програми, яка знаходиться поза класом, необхідно використовувати ім'я об'єкта і оператор "крапка". Наприклад, у процесі виконання такого коду програми буде викликано функцію init() для об'єкта A_ob:

chergaClass A_ob, B_ob;

A_ob.init();

Під час виклику функції A_ob.init() дії, визначені у функції init(), будуть спрямовані на копії даних, що належать об'єкту A_ob. Необхідно мати на увазі, що A_ob і B_ob – це два окремі об'єкти. Це означає, що, наприклад, ініціалізація об'єкта A_ob зовсім не приводить до ініціалізації членів-даних об'єкта B_ob. Єдине, що зв'язує об'єкти A_ob і B_ob, це те, що вони мають один і той самий тип.

Якщо одна функція-член класу викликає іншу функцію-члена того ж свмого класу, то не потрібно вказувати ім'я об'єкта і використовувати оператор "крапка". У цьому випадку компілятор вже точно знає, який об'єкт піддається обробленню. Ім'я об'єкта і оператор "крапка" необхідні тільки тоді, коли функція-член класу викликається кодом програми, розташованим поза класом. З тих самих причин функція-член класу може безпосередньо звертатися до будь-якого члена даних свого класу, але програмний код, розташований поза класом, повинен звертатися до змінної класу, використовуючи ім'я об'єкта і оператор "крапка".

У наведеному нижче коді програми механізм оголошення та застосування класу chergaClass продемонстровано повністю. Для цього об'єднано всі разом вже знайомі Вам частини коду програми і додано відсутні деталі.

Код програми 12.1. Демонстрація способу оголошення та застосування класу chergaClass

#include <vcl>

#include <iostream>// Для потокового введення-виведення

#include <conio>// Для консольного режиму роботи

using namespace std; // Використання стандартного простору імен

 

class chergaClass { // Оголошення класового типу

int qpMas[100];

int sloc, rloc;

public:

void init(); // Ініціалізація класу

void putQp(int izm); // Введення в чергу значення