152 ________________Часть II. Программирование на C++

но. Приведение типов довольно просто позволяет справиться с этой проблемой. Однако есть лучший путь.

Если один тип в действительности является иной интерпретацией другого типа (как, например, массив символов с нулем в конце можно рассматривать как строку), то естественно ожидать существование какой-то возможности преобразования между этими типами, чтобы угодить компилятору. Действительно, для подобных ситуаций можно создать так называемую операцию преобразования. В простейшем смысле операция преобразования — это функция, которая получает аргумент одного типа, а возвращает аргумент с тем же физическим представлением, но с другим именем.

Функции преобразования — это очень специальная разновидность функций и синтаксис их довольно необычен:

operator compatible type( alter_ego);

Первым вместо типа возвращаемого значения стоит ключевое слово operator. Вызов функции здесь сам на себя непохож и производится неявно. Таким образом, ключевое слово operator нужно для того, чтобы компилятор распознал вызов функции в отсутствие его традиционных атрибутов (имени функции и скобок).

Далее...

В этой главе вы получили представление об операциях и встроенных типах данных. Внешне они выглядят именно так, как и можно было ожидать: действительно, в своей обычной ипостаси операции и переменные практически неотличимы от того, к чему мы привыкли при вычислениях на бумаге или с помощью калькулятора. Однако в C++ вещи не всегда являются тем, чем кажутся.

Если бы C++ был еще одним ординарным языком, то операции и базовые типы данных работали бы так, как можно предполагать по их внешнему виду: с = а + Ь; но C++ — язык неординарный. Язык C++ является олицетворением объектно-ориентированного стиля программирования. Многие выразительные средства этого языка подразумевают больше, чем видно на поверхности, внутренняя механика часто скрыта инкапсуляцией. Вас, как профаммиста на C++, инкапсуляция избавляет от необходимости знания всех деталей функционирования объектов для работы с ними. Вам, как программисту, изучающему C++, необходимо знать инкапсуляцию изнутри и уметь пройти все стадии создания черных ящиков наподобие cin и cout, таких простых с виду.

В этой главе вы получили первое представление о новых выразительных средствах C++. В следующих главах вы изучите все этапы создания классов вроде cin и cout. А пока пусть вас утешает мысль, что хотя самые передо-