Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


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




В этом разделе речь будет идти о тех ситуациях, когда при выполнении операции или инструкции участвуют данные разных типов. Например, что произойдет, если переменной целого типа присваивается числовое значение типа Single?

В отношении типов VB проявляет максимально возможную терпимость. Когда это возможно, преобразование одного типа в другой будет выполнено автоматически и программисту нет нужды об этом заботиться. Следует при этом иметь в виду:

При преобразовании числа с плавающей точкой в целое происходит округление до ближайшего целого.

При преобразовании целого числа в число с плавающей точкой дробная часть принимается равной нулю.

В случае преобразования целого типа в другой целый тип возможна ситуация, когда целый тип с большим диапазоном значений преобразуется в целый тип с меньшим диапазоном значений. Если значение, которое присваивается «короткому» типу, выйдет за пределы диапазона его допустимых значений, произойдет ошибка периода выполнения.

Строковые и числовые типы совместимы. Можно присвоить числовое значение строковой переменной и наоборот. Однако строка символов должна быть такой, чтобы она могла трактоваться как число.

Например, не возникнет ошибки периода выполнения при присвоении свойству Caption некоторой надписи, которое имеет тип String, значения 125 переменной типа Integer. Произойдет преобразование целого числового значения 125 в строку символов “125”.

И наоборот. При присвоении переменной целого типа значения свойства Text некоторого текстового поля, которое имеет тип String (пусть, например, в этом текстовом поле набрано три символа 125) произойдет преобразование строки символов “125” в целое число и целочисленная переменная получит значение 125.

 

Sub A

1: Dim i As Integer

2: i = Label1.Caption

3: Label1.Caption = 250

End Sub

 

В теле этой процедуры в строке 2 происходит преобразование значения свойства Caption из типа String к типу Integer. В строке 3 происходит преобразование значения целой константы 250 к типу String, который имеет свойство Caption.

Возможно также выполнение арифметической операции, например умножения (*), когда один или оба операнды являются строкой символов, но при условии, что их значения, можно интерпретировать как числа.

 

Sub B

Dim i As Integer, str As String, _

r As Integer

i = 5

str = “25”

r = i * str ‘Результат: 125. String -> Integer

End Sub

 

При этом особую осторожность следует соблюдать с операцией сложения (+), которая в зависимости от контекста может означать либо операцию сложения, либо операцию сцепления.

В операции операнд1 + операнд2 символ (+) VB будет воспринимать как:

операцию сложения, если оба операнда имеют кокой либо из числовых типов;

операцию сложения, если один операнд имеет числовой тип, а второй является строкой символов, значение которой может быть интерпретировано как число;

операцию сцепления, если один операнд имеет числовой тип, а второй является строкой символов, значение которой не может быть интерпретировано как число;

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

 

Пример.

 

Dim i As Integer

Dim r As Single

Dim st1 As String, st2 As String

Private Sub Command1_Click ()

i = 2

r = -1.3

st1 = r + i ‘Результат: “0.7”

‘Integer-> Single, Single -> String

End Sub

 

Остановимся подробнее на существенных, но на первый взгляд не заметных, особенностях выполнения инструкций процедуры Command1_Click. При выполнении этих трех инструкций два раза осуществляется преобразование типа.

В инструкции St1 = r + i при выполнении арифметической операции сложения тип Integer операнда i преобразуется к типу Single операнда r, так как арифметическая операция может быть выполнена над однотипными операндами.

Наконец, результат сложения типа Single преобразуется к типу String переменной St1.

 

Пример. Рассмотрим продолжение программного кода предыдущего примера.

 

Private Sub Command2_Click()

st1 = 25 ‘Результат: “25”

st2 = 15 ‘Результат: “15”

st2= st1 + st2 ‘Результат: “2515”

End Sub

 

Произошло сцепление операндов. Это следовало ожидать, поскольку оба операнда имеют строковый тип. Посмотрим, что произойдет, если один операнд будет иметь строковый, а другой – числовой, например, целый тип.

Продолжим программный код, приведенный в двух предыдущих примерах. Введем следующий программный код:

 

Private Sub Command2_Click()

st1 = 2

st2 = 3

st1 = 25 + st1 + st2 ‘Результат: “30”

‘String -> Integer, String -> Integer

‘Integer -> String

End Sub

 

При выполнении вычисления значения выражения 25 + st1 + st2 первой выполняется операция 25 + st1. В этой операции один операнд (константа 25) имеет числовой тип, а другой (строка st1) имеет значение, которое может быть интерпретировано как число. Поэтому здесь символ (+) воспринят как операция сложения. Результат операции сложения (27) тоже имеет числовой тип, поэтому символ (+) в следующей операции 27+3 также воспринят как операция сложения и, в конце концов, получен понятный результат 30.

Изменим порядок следования операндов в инструкции присвоения st1 = 25 + st1 + st2, применив вместо нее инструкцию st1 = st1 + st2 + 25.

Переменная st1 на первый взгляд получит неожиданный результат вычислений “48”. Изменение порядка слагаемых привело к изменению значения результатов вычислений! Почему? Дело в том, что первой теперь выполняется операция st1 + st2, в которой символ (+) воспринимается как операция сцепления, поскольку оба операнда имеют строковый тип. Результат операции соответственно тоже имеет строковый тип и равен “23”. При выполнении следующей операции “23” + 25 символ (+) будет воспринят, как операция сложения, поскольку один операнд (константа 25) имеет числовой тип, а другой операнд (“23”) может быть интерпретирован как число.

Итак, в VB в отличие от математики сумма может зависеть от порядка слагаемых.


Поделиться:

Дата добавления: 2014-12-03; просмотров: 181; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты