Лекции. Основные понятия и определения
Скачать 1.94 Mb.
|
10.10. Пользовательские типы данныхВ языке C и предыдущих версиях языка Basic для определения таких типов данных как: матрицы, строки, точки и т.п. использовались инструкции typedef и Type соответственно. Сейчас для этих целей в изучаемых языках применяют понятия структуры и класса. Поэтому в данном курсе эти инструкции не расматриваются. Структуры изложены ранее. Основополагающее понятие класса будет введено при изучении последующих дисциплин. 10.11. Преобразование типовРазличают автоматические преобразования, которые выполняются транслятором в случае вхождения в состав выражения объектов разных типов, и явные преобразования, задаваемые указанием программиста. 10.10.1. Автоматические преобразованияБольшинство автоматических преобразований касаются числовых типов данных. Их принцип: преобразование выполняется от частного к более общему типу, т.е. от целых к данным с плавающей точкой. Если в выражении данные одного типа, но различной длины, то результат получает размер наиболее длинного из операндов. Для языка C это можно выразить следующими цепочками: char→short→int→long→double float→double Для языка Basic: Byte→Short→Integer→Long→Double Single→Double Это позволяет не терять точности представления данных при преобразовании. В языке Basic допустимо преобразование из числа в строку и обратно. Для успешного преобразования из строки в число необходимо, чтобы содержание строки могло быть интерпретировано как число в любой форме представления. Число в строку преобразуется всегда успешно. Для реализации автоматических (неявных) преобразований в среде разработки должна быть установлен режим Option strict → Off. Для VB 2008 он устанавливается в пункте меню Project → <имя проекта> Properties → Compile → Option strict. Для русифицированной версии VB 2010 – Проект → Свойства: <имя проекта> → Компиляция → Проверка сужающих преобразований. Особый случай представляет собой преобразование данных при присваивании. Его можно отнести к группе явных преобразований. 10.10.2. Явные преобразованияВ языке C они выполняются конструкцией вида: (<имя-типа>)<выражение> Пример. sqrt((double)n) Следует заметить, что применение оператора приведения типа, как его принято называть, ограничено, поскольку автоматические преобразования в подавляющем большинстве случаев дают тот же результат. В языке Basic явные преобразования выполняются с помощью группы встроенных функций. CBool(<выражение>) → Boolean CByte(<выражение>) → Byte CСhar(<выражение>) → Char CDate(<выражение>) → Date CDbl(<выражение>) → Double CDec(<выражение>) → Decimal CInt(<выражение>) → Integer CLng(<выражение>) → Long CSbyte(<выражение>) → SByte CShort(<выражение>) → Short CSng(<выражение>) → Single CStr(<выражение>) → String CUInt(<выражение>) → UInteger CULng(<выражение>) → ULong CUShort(<выражение>) → UShort Необходимо отметить особенности некоторых видов явных преобразований. Преобразование вида float | double → int в языке C приводит к отбрасыванию дробной части. Пример. int k, m; float s; s=3.78; k=s; → k=3 m=-s; → s=-3 В языке Basic аналогичное преобразование вызывает округление. Пример. dim k as integer, m as integer, s as single s=3.78 k=s → k=4 k=s-0.5 → k=3 Преобразование вида int → unsigned в языке C для отрицательных чисел приводит к следующему эффекту. Пример. int k; unsigned m; k=-1; m=k; → m=65535 При преобразовании типов в направлении, обратном схеме автоматических преобразований, возможны потеря точности и даже ошибки во время выполнения программы. Это происходит в том случае, если результат преобразования имеет меньшую точность представления, чем источник, или меньший диапазон представления данных. Пример. Dim k As Long, s As Single, m As Short k=123456789 s=k → s=1.234568e+8 m=k → Ошибка! |