Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Не підтверджено.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
3 Мб
Скачать
☆

Int mainO

{

myClass Obj; // Створення об'єкта класу Obj.Get(100);

cout«"c=" « Obj.PutO << endl; getchO; return 0;

}

Внаслідок виконання ця програма відображає на екрані число 100.

Безумовно, цей приклад тривіальний, але у ньому показано, як можна вико­ристовувати покажчик this. З матеріалу наступних розділів Ви зрозумієте, чому покажчик this є таким важливим для написання програм мовою C++.

Вартоа нати'.аФуикцй-"друзі" не мають покажчика this, оскільки еони не є членами класу. Тільки функцїі-члени класу мають покажчик this.

Розділ 4. ОСОБЛИВОСТІ МЕХАНІЗМУ ПЕРЕВИЗНАЧЕННЯ ОПЕРАТОРІВ

Для покращення роботи з визначеними програмістом "класовими" типами у мові програмування C++ оператори можна перевизначати. Отриманий від цього виграш дає змогу органічно інтегрувати нові типи даних користувача у середови­ще програмування.

Перевизначаючи оператор, можна встановити певну його дію для конкретно­го класу. Наприклад, клас, який визначає зв'язний список, може використовувати оператор додавання "+" для внесення об'єкта до списку. Клас, який реалізує стек, може використовувати оператор додавання "+" для запису об'єкта в стек. У будь- якому іншому класі аналогічний оператор міг би слугувати для абсолютно іншої мети. При перевизначенні оператора жодне з оригінальних значень його об'єктів не втрачається. Перевизначений оператор (у своїй новій якості) працює як абсо­лютно новий оператор. Наприклад, при перевизначенні бінарного оператора дода­вання "+" для оброблення зв'язного списку. Ця функція не призводить до зміни операції додавання стосовно цілочисельних значень.

Механізм перевизначення операторів тісно пов'язаний з механізмом перевиз- начення функцій. Щоб перевизначити оператор, необхідно визначити дію нової операції для класу, до якого вона застосовуватиметься. Для цього створюється функція operator (операторна функція), яка визначає дію цього оператора. Її за­гальний формат є таким:

//Створення операторної функції'

тип ім 'я_класу. :о perato г#(перелік_аргументів)

{

операція_над_класом

}

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

  1. Механізми перевизначення операторів з використанням функцій-членів класу

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

Кожний з механізмів перевизначення операторів спробуємо розглянути більш де­тально на конкретних прикладах.

  1. Перевизначення бінарних операторів додавання "+" і присвоєння "="

Почнемо з простого прикладу. У наведеному нижче коді програми ство­рюється клас kooClass, який підтримує дії з координатами об'єкта в тривимірному просторі. Для класу kooClass перевизначаються оператори додавання "+" і прис­воєння Отже, розглянемо уважно код цієї програми.

Код програми 4.1. Демонстрація механізму перевизначення бінарних операто­рів додавання "+" та присвоєння "=" за допомогою функцій- членів класу

#include <vcl>

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

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

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