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

13.8. Ключове слово this

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

Ключове слово this – це покажчик на об'єкт, який викликає функцію-члена.

Як уже зазначалося вище, функція-член класу може мати прямий доступ до закритих (private) членів-даних свого класу. Наприклад, нехай визначено такий клас:

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

int izm;

void fun_f() {...};

// ...

};

У функції fun_f() можна використовувати таку настанову для присвоєння члену izm значення 10: izm = 10;

Насправді попередня настанова є скороченою формою такої:

this->izm = 10;

Щоби зрозуміти, як працює покажчик this, розглянемо таку коротку програму.

Код програми 13.16. Демонстрація механізму застосування ключового слова this

#include <vcl>

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

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

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

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

int izm;

public:

void putIzm(int num) {this->izm = num;} // те саме, що izm = num

int getIzm() { return this->izm;} // те саме, що return izm

};

int main()

{

demoClass T_ob; // Створення об'єкта класу

T_ob.putIzm(100);

cout << "izm= " << T_ob.getIzm() << "\n";

getch(); return 0;

}

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

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

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

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

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

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

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

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

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

{

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

}

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

Оператори перевантажуються за допомогою функції operator.

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