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

Преобразование типов

Вы уже знаете, что операция = используется для присваивания значения одной переменной другой в выражениях типа

intvar1 = intvaг2;

где intvar1 и intvar2 — целые переменные. Вы могли также заметить, что опера- ция = присваивает значение одного объекта, определенного пользователем, дру- гому объекту того же типа, как в строке

dist3 = dist1 + dist2;

где результат операции сложения, имеющий тип Distance, присвоен другому объ- екту типа Distance — dist3. Обычно если значение одного объекта присваивается другому объекту того же типа, то значения всех переменных объекта просто ко- пируются в новый объект. Компилятору не нужны специальные инструкции,

чтобы использовать операцию = для определенных пользователем типов, таких, как объекты класса Distance.

Таким образом, присвоение внутри типов, независимо от того, принадлежат они к основным или определенным пользователем типам, выполняется компи- лятором без усилий с нашей стороны, при этом с обеих сторон знака равно ис- пользуются переменные одинаковых типов. Но что же случится, если с разных сторон знака равно будут стоять переменные разных типов? Это сложный во- прос, которому мы посвятим остаток этой главы. Сначала мы рассмотрим, как компилятор выполняет преобразование основных типов, которое происходит автоматически. Затем мы объясним несколько ситуаций, где компилятор не выполняет преобразование автоматически и мы должны определить, что он должен делать. В эти ситуации включены преобразования между основными и определенными пользователем типами и преобразования между различными определенными пользователем типами.

Может показаться, что это демонстрирует недостаточную практику програм- мирования для конвертирования одного типа в другой. Ведь в таких языках, как Pascal, предприняты попытки избавить вас от проделывания подобных преоб- разований. Однако философия C++ (и С) — это гибкость, предоставленная возможностью преобразования, которая перевешивает недостатки. Это спорный вопрос, и мы вернемся к нему в конце этой главы.

 

16