23) Перевантаження стандартних операцій

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

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

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

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

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

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

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