Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+ООП_Навч_посібник.doc
Скачиваний:
8
Добавлен:
01.07.2025
Размер:
6.58 Mб
Скачать

10.5.2. Анонімні об'єднання

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

Анонімні об'єднання дають змогу оголошувати різні змінні, які розділяють одну і ту саму область пам'яті.

Розглянемо такий приклад.

Код програми 10.10. Демонстрація механізму використання анонімного об'єднання

#include <vcl>

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

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

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

int main()

{

union { // Оголошення анонімного об'єднання.

short int count;

char ch[2];

};

/* Ось як відбувається безпосереднє звернення до

членів анонімного об'єднання. */

ch[0] = 'x';

ch[1] = 'y';

cout << "Об'єднання як символи: " << ch[0] << ch[1] << "\n";

cout << "Об'єднання як цілі значення: " << count << "\n";

getch(); return 0;

}

Ця програма відображає наступний результат.

Об'єднання у вигляді символів: xy

Об'єднання у вигляді цілого значення: 31096

Число 31096 отримане внаслідок занесення символів x і y в молодший і старший байти змінної count відповідно. Як бачите, до обох змінних, що входять до складу об'єднання, як count, так і ch, можна отримати доступ так само, як до звичайних змінних, а не як до складових об'єднання. Незважаючи на те, що вони оголошені як частина анонімного об'єднання, їх імена знаходяться на тому ж самому рівні області видимості, що і інші локальні змінні, які оголошено на рівні об'єднання. Таким чином, член анонімного об'єднання не може мати імені, що збігається з іменем будь-якої іншої змінної, оголошеної в тій самій області видимості.

Анонімне об'єднання є засобом, за допомогою якого програміст може повідомити компілятор про свій намір, щоб дві (або більше) змінні розділяли одну і ту саму область пам'яті. За винятком цього моменту, члени анонімного об'єднання поводяться подібно до будь-яких інших змінних.

10.5.3. Використання оператора sizeof для гарантії переносності коду програми

Як було показано вище, структури та об'єднання створюють об'єкти різних розмірів, які залежать від розмірів і кількості їх членів. Окрім цього, розміри таких вбудованих типів як int можуть змінюватися при переході від одного комп'ютера до іншого. Іноді компілятор заповнює структуру або об'єднання так, щоб вирівняти їх по границі парного слова або абзацу1. Тому, якщо у програмі потрібно визначити розмір (у байтах) структури або об'єднання, використовують оператор sizeof. He намагайтеся вручну виконувати додавання окремих членів. Через заповнення або інші апаратно-залежні чинники розмір структури або об'єднання може виявитися більшим від суми розмірів окремих їх членів.

Варто знати! Об'єднання завжди займатиме область пам'яті, достатню для зберігання його найбільшого члена.

Розглянемо такий короткий приклад:

union xUnion { // Оголошення типу об'єднання

char ch;

int izm;

double f;

} uVar; // Визначення змінної об'єднання

Тут у процесі виконання оператора sizeof для обчислення розміру об'єднання uVar отримаємо результат 8 (за умови, що double-значення займає 8 байтів). У процесі виконання програми немає значення, що реально зберігатиметься в змінній uVar; тут важливим є розмір найбільшої змінної, що входить до складу об'єднання, оскільки об'єднання повинно мати розмір найбільшого його елемента.

Переходимо до об'єктно-орієнтованого програмування

Цей розділ завершує опис не об'єктно-орієнтованих атрибутів мови програмування C++. Починаючи з наступного розділу, розглядатимемо засоби, які підтримують об'єктно-орієн­то­ва­не програмування (Object Oriented Programming – OOP), або ООП. Щоб зрозуміти об'єктно-орієнтовані засоби мови C++ і навчитися їх ефективно застосовувати, необхідне глибоке розуміння матеріалу цього і попередніх дев'яти розділів. Тому, можливо, читачу варто повторити пройдений матеріал. Особливу увагу під час повторення необхідно звернути на покажчики, структури, функції та перевантаження функцій.

Частина ІІ. Об'єктно-орієнтоване програмування мовою С++

У цій частині навчального посібника будуть розглядатися такі основні теми:

Про автора 18

Передмова 19

Вступ 20

Розділ 1. Історія виникнення| мови програмування С++ 27

Розділ 2. Основні елементи мови програмування С++ 35

Розділ 3. Основні типи даних| у мові програмування C++ 55

Розділ 4. Поняття про настанови керування ходом виконання С++-програми 72

Розділ 5. Масиви та рядки – засоби групування взаємопов'язаних між собою змінних 91

Розділ 6. Особливості застосування покажчиків 111

Розділ 7. Основи застосування С++-функцій 131

Розділ 8. Використання засобів програмування для розширення можливостей С++-функцій 157

Розділ 9. С++-специфікатори та спеціальні оператори 177

Розділ 10. Поняття про структури і об'єднання даних 206

Розділ 11. Основи розроблення об'єктно-орієнтованих програм мовою C++ 233

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

Розділ 13. Робота з класами 270

Розділ 14. Перевантаження операторів 293

Розділ 15. Успадкування в класах 324

Розділ 16. Віртуальні функції та поліморфізм 349

Розділ 17. Шаблони в класах 364

Розділ 18. Оброблення виняткових ситуацій 381

Розділ 19. С++-система введення-виведення потокової інформації 399

Розділ 20. Динамічна ідентифікація типів і оператори приведення типу 432

Розділ 21. Поняття про простори імен та інші ефективні програмні засоби 448

Розділ 22. Введення в стандартну бібліотеку шаблонів 473

Розділ 23. Особливості роботи препроцесора С++ 513

Розділ 24. Формалізація процесу розроблення об'єктно-орієнтованого програмного забезпечення| 524

Додаток А. Основи створення консольних програм у середовищі Borland C++ Builder 559

Додаток Б. Основи створення консольних програм у середовищі Microsoft Visual C++ 567

Додаток В. Дещо про С-систему введення-виведення 573

Додаток Г. Особливості використання застарілого С++-компілятора 587

Додаток Д. .NET-розширения для C++ 589

Література 593

Розділ 11. Основи розроблення об'єктно-орієнтованих програм мовою C++

Складність не в тому, щоби створити витвір мистецтва; складність в умінні зробити це.

Костянтин Бранкузі

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

  • для чого потрібно знати ООП?

  • які переваги ООП мовою С++ перед такими традиційними мовами програмування, як Pascal, Visual Basic чи C?

  • що є основою ООП?

  • який зміст термінів – об'єкти і класи?

  • як пов'язані між собою мови С і C++?

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