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

Псевдоним функтора заложен внутри самого функтора, то есть имя Functor становится именем типа. Если определить функтор как

void (*Functor)( int);

то корректное применение typedef будет выглядеть следующим образом:

typedef void (*Functor)( int) ;

Объявление переменной такого типа происходит так же, как если бы псевдоним,был любого другого типа:,

Functor fptr;

Функторы рассматриваются здесь, поскольку они требуют слегка измененного применения спецификатора typedef. Сфокусируйте свое внимание на двух вариантах команды typedef и отложите изучение функторов до тех пор, пока вы не достигнете соответствующего раздела. Альтернативой могло бы быть разбиение обсуждения спецификатора typedef: половина*сейчас, половина после рассмотрения функторов в главе 11 "Функции". Сейчас нам не важны детали. Целью было подготовить вас к встрече с альтернативным синтаксисом, так, чтобы он не казался слишком чуждым, и вкратце ознакомить с новой темой.

Приведение типов

Приведение типов имеет место тогда, когда происходит преобразование между двумя схожими, но не идентичными типами. Такое происходит, например, когда мы пытаемся проделать преобразование внутри семейства типов. Самый простой пример — целочисленные типы.

Допустим, у нас есть целое число, полученное, скажем, через функцию из файла stdio.h

int get () ;

но мы хотим получить символ. Использование get вместе с cout — объектом ostream приводит к выводу целого числа. Например, если поток ввода содержит "А", то

cout « get() « endl;

выдаст число 65. Вы, скорее, поменяете тип переменной на символьный, чем перепишете заново саму функцию. Такая подмена называется приведением типов; оно может иметь две формы с одинаковым результатом. В следующем примере используется предыдущий фрагмент, но результат, возвращенный get, присваивается целому: