Здесь водятся Драконы! - старинная карта



В этой главе описывается аппарат, предоставляемый в C++ для перегрузки операций. Программист может определять смысл операций при их применении к объектам определенного класса. Кроме арифметических, можно определять еще и логические операции, операции сравнения, вызова ) и индексирования [], а также можно переопределять присваивание и инициализацию. Можно определить явное и неявное преобразование между определяемыми пользователем и основными типами. Показано, как определить класс, объект которого не может быть никак иначе скопирован или уничтожен кроме как специальными определенными пользователем функциями.

Статьи → Перегрузка Операций → Предостережение

<!--StartFragment --> Как и большая часть возможностей в языках программирования, перегрузка операций может применяться как правильно, так и неправильно. В частности, можно так воспользоваться возможность определять новые значения старых операций, что они станут почти совсем непостижимы. Представьте, например, с какими сложностями столкнется человек, читающий программу, в которой операция + была переопределена для обозначения вычитания.
Опубликовал admin
23 Мар, Вторник 2004г.

Статьи → Перегрузка Операций → Друзья и Члены

<!--StartFragment -->

Теперь, наконец, можно обсудить, в каких случаях для доступа к закрытой части определяемого пользователем типа использовать члены, а в каких - друзей. Некоторые операции должны быть членами: конструкторы, деструкторы и виртуальные функции, но обычно это зависит от выбора.

Рассмотрим простой класс X:


class X {
// ...
X(int);
int m();
friend int f(X&);
};

Опубликовал admin
23 Мар, Вторник 2004г.

Статьи → Перегрузка Операций → Класс Строка

<!--StartFragment -->

Вот довольно реалистичный пример класса string. В нем производится учет ссылок на строку с целью минимизировать копирование и в качестве констант применяются стандартные символьные строки C++.

Опубликовал admin
23 Мар, Вторник 2004г.

Статьи → Перегрузка Операций → Вызов Функции

<!--StartFragment -->

Вызов функции, то есть запись выражение(список_выражений), можно проинтерпретировать как бинарную операцию, и операцию вызова можно перегружать так же, как и другие операции.

Опубликовал admin
23 Мар, Вторник 2004г.

Статьи → Перегрузка Операций → Индексирование

<!--StartFragment -->

Чтобы задать смысл индексов для объектов класса используется функция operator[]. Второй параметр (индекс) функции operator[] может быть любого типа. Это позволяет определять ассоциативные массивы и т.п. В качестве примера давайте перепишем пример , где при написании небольшой программы для подсчета числа вхождений слов в файле применялся ассоциативный массив. Там использовалась функция. Здесь определяется надлежащий тип ассоциативного массива:

Опубликовал admin
23 Мар, Вторник 2004г.


RSS-материал

Программирование для чайников.