402 ____________ Часть III. Современное программирование на C++
компилятор выдаст сообщение об ошибке, потому что из текста следует присваивание левостороннему значению (ссылке, указателю, массиву), но имеется только одиночный объект типа т. В строке 13 примера в разделе "Массив с контролем границ" содержится корректное определение индексной операции: она возвращает ссылку на тип, который вы возвращаете. Поскольку объекты в реальных массивах должны быть модифицируемы, то необходимо возвращать их адреса.
Далее...
Определение того, когда и как перегружать операции, требует известных усилий с вашей стороны. Однако ваши усилия с лихвой окупятся, а отвергая эти возможности, вы многое теряете. Одним из первых аспектов, усваиваемых при знакомстве с большинством языков программирования, является работа с базовыми типами данных и операциями. Имея возможность расширения сферы применения операций на сложные типы, можно создаваемые вами классы сделать близкими и понятными пользователям ваших программ.
Нет универсального метода, чтобы научиться создавать операции. Можно набираться опыта, экспериментируя с перегружаемыми операциями в заголовочных файлах Borland C++. А можно определять операции над классами в виде обычных функций, а затем, отобрав базовые функции типа сложения, инкремента и т. п., реализовать их уже в виде соответствующих эквивалентных операций.
На основе полученных знаний поднимайте свое мастерство на следующий уровень. Дополнительная информация по представленным здесь темам имеется в следующих главах:
• Глава б "Базовые типы данных и операции" представляет возможность непосредственного освоения базовых типов данных и встроенных операций.
• Глава 8 "Раскрытие выражений" демонстрирует приемы упрощения кода со скобками, условными выражениями, оператор-функциями и преобразованием типов.
• Глава 14 "Базовые концепции классов" объясняет, как писать объектно-ориентированные программы на C++.
• Глава 17 "Конструкторы: копирование и присваивание" описывает операции копирования и присваивания, с которыми чаще всего связаны утечки памяти в классах C++.
• Глава 21 "Понятие строк в ANSI С и ANSI C++" показывает, как экземпляры строковых классов можно запросто использовать совместно с функциями С.