×
Traktatov.net » Описание языка PascalABC.NET » Читать онлайн
Страница 33 из 252 Настройки

s := s1 + s2; // s = [1..5]

s := s1 - s2; // s = [1]

s := s1 * s2; // s = [2..4]

// s += s1 эквивалентно s := s + s1

// s -= s1 эквивалентно s := s - s1

// s *= s1 эквивалентно s := s * s1

s += [3..6]; // s = [2..6]

s -= [3]; // s = [2,4..6]

s *= [1..5]; // s = [2,4..5]

end.

К множествам с базовыми элементами одного типа применимы также операции сравнения = (равенство), <> (неравенство), <= (нестрого вложено), < (строго вложено), >= (нестрого содержит) и > (строго содержит):

[1..3] = [1,2,3]

['a'..'z'] <> ['0'..'9']

[2..4] < [1..5]

[1..5] <= [1..5]

[1..5] > [2..4]

[1..5] >= [1..5]

Но неверно, что [1..5] < [1..5].

Наконец, операция in определяет, принадлежит ли элемент множеству: 3 in [2..5] вернет True, 1 in [2..5] вернет False.


Операция @

Операция @ применяется к переменной и возвращает ее адрес. Тип результата представляет собой типизированный указатель на тип переменной. Например:

var

r: real;

pr: ^real := @r;

Операции is и as

Операция is предназначена для проверки того, имеет ли классовая переменная указанный динамический тип. Операция as позволяет безопасно преобразовать переменную одного классового типа к другому классовому типу (в отличие от явного приведения классового типа).

Операция is имеет вид:

a isClassType

и возвращает True если a принадлежит к классу ClassType или одному из его потомков.

Например, если Base и Derived - классы, причем, Derived - потомок Base, переменные b и d имеют соответственно типы Base и Derived, то выражения b is Base и d is Base возвращают True, а b is Derived - False.

Операция as имеет вид:

a asClassType

и возвращает ссылку на объект типа ClassType если преобразование возможно, в противном случае возвращает nil.

Например, в программе

type

Base = class

end;

Derived = class(Base)

procedure p;

begin

end;

end;

var b: Base;

begin

b := new Base;

writeln(b is Derived);

b := new Derived;

writeln(b is Derived);

end.

первый раз выводится False, второй - True.

Операции is и as используются для работы с переменной базового класса, содержащей объект производного класса.

1 способ.

if b is Derived then

Derived(b).p;

2 способ.

var d: Derived := b as Derived;

d.p;

Операция new

Операция new имеет вид:

newИмяКласса(ПараметрыКонструктора)

Она вызывает конструктор класса ИмяКласса и возвращает созданный объект.

Например:

type

My = class

constructor Create(i: integer);

begin

end;

end;

var m: My := new My(5);

Эквивалентным способом создания объекта является вызов конструктора в стиле Object Pacal:

var m: My := My.Create(5);

Создание объекта класса при инициализации переменной проще проводить, используя автоопределение типа:

var m := new My(5);

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


Операции typeof и sizeof

Операция sizeof(имя типа) возвращает для этого типа его размер в байтах.

Операция typeof(имя типа) возвращает для этого типа объект класса System.Type. Приведем пример использования typeof: