ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 8) онлайн
Преобразование типов
Вы уже знаете, что операция = используется для присваивания значения одной переменной другой в выражениях типа
intvar1 = intvaг2;
где intvar1 и intvar2 — целые переменные. Вы могли также заметить, что опера- ция = присваивает значение одного объекта, определенного пользователем, дру- гому объекту того же типа, как в строке
dist3 = dist1 + dist2;
где результат операции сложения, имеющий тип Distance, присвоен другому объ- екту типа Distance — dist3. Обычно если значение одного объекта присваивается другому объекту того же типа, то значения всех переменных объекта просто ко- пируются в новый объект. Компилятору не нужны специальные инструкции,
чтобы использовать операцию = для определенных пользователем типов, таких, как объекты класса Distance.
Таким образом, присвоение внутри типов, независимо от того, принадлежат они к основным или определенным пользователем типам, выполняется компи- лятором без усилий с нашей стороны, при этом с обеих сторон знака равно ис- пользуются переменные одинаковых типов. Но что же случится, если с разных сторон знака равно будут стоять переменные разных типов? Это сложный во- прос, которому мы посвятим остаток этой главы. Сначала мы рассмотрим, как компилятор выполняет преобразование основных типов, которое происходит автоматически. Затем мы объясним несколько ситуаций, где компилятор не выполняет преобразование автоматически и мы должны определить, что он должен делать. В эти ситуации включены преобразования между основными и определенными пользователем типами и преобразования между различными определенными пользователем типами.
Может показаться, что это демонстрирует недостаточную практику програм- мирования для конвертирования одного типа в другой. Ведь в таких языках, как Pascal, предприняты попытки избавить вас от проделывания подобных преоб- разований. Однако философия C++ (и С) — это гибкость, предоставленная возможностью преобразования, которая перевешивает недостатки. Это спорный вопрос, и мы вернемся к нему в конце этой главы.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
