Главная->Інформатика та програмування->Содержание->Неявные преобразования типов

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 2) онлайн

Неявные преобразования типов

Давайте рассмотрим действия компилятора, когда он встречает выражения со смешанными типами, подобные приведенным в программе MIXED. Каждый тип данных можно условно считать «ниже» или «выше» по отношению к другим типам. Иерархия типов данных приведена в табл. 2.4.

Таблица 2.4. Иерархия типов данных

Тип данных            Старшинство

long double       Высший

double

float

long

Int

short

char       Низший

Арифметические операции, подобные + и *, действуют следующим образом: если их операнды имеют различные типы, то операнд с более «низким» типом будет преобразован к более «высокому» типу. Так, в программе MIXED тип int переменной count был преобразован в float с помощью введения временной пере- менной, содержимое которой умножается на переменную avgWeight. Результат, имеющий тип float, затем преобразовывается к типу double, чтобы его можно было присвоить переменной totalWeight. Процесс преобразования типов показан на рис. 2.9.

 

Рис. 2.9. Преобразования типов

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

 

данных. В этом случае нам самим придется создавать средства, выполняющие необходимые преобразования типов, поскольку компилятор не сможет преобра- зовывать пользовательские типы данных так, как он делал это со стандартными типами.

 

50