Сравнение языков программирования (esyr) (1161143), страница 2
Текст из файла (страница 2)
По умолчанию - знаковые (так что, например, signed int - то же самое, что int). Исключение - char. Его знаковость/беззнаковость зависит от реализации.С плавающей точкойfloatdoublelong double1 = sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long)sizeof(float) <= sizeof(double) <= sizeof(long double)const <тип> <имя_переменной> = <значение>;// Значение переменной не может изменяться после инициализации (инициализация обязательна).Aрифметические операции+ (плюс, унарный и бинарный)- (минус, унарный и бинарный)* (умножение)/ (деление)Над целыми - операция % получения остатка: 7%2 = 1Операции сравнения== (равно)open in browser PRO versionAre you a developer? Try out the HTML to PDF APIpdfcrowd.com!= (не равно)<, >, <=, >=Также логические операции ( &&, || ), побитовые операции(&, |, ^, <<, >>), а так же сокращ ённые формы многих операций: +=, -=, %=, &&=, ||=, &=, ++, -(последние два имеют префиксные и постфиксные формы) и им подобные.При присваивании и арифметических операциях C++ выполняет все осмысленные преобразования между основными типами, чтобы их можно было сочетать безограничений.Производные типы* - указатель на*const - константный указатель на& - ссылка на[] - вектор (одномерный массив), индексация с 0() - функция, возвращ ающ аяУнарное & - операция взятия адресаНапример:char* p // указатель на символchar *const q // константный указатель на символchar v[10] // вектор из 10 символовchar c; p = &c; // p указывает на cC#[править]Встроенные типы1.
sbyte, byte - 8-битное целое число2. short, ushort - 16-битное целое число3. int, uint - 32-битное целое число4. long, ulong - 64-битное целое число5. float, double - 32- и 64-битные числа с плавающ ей запятой6. bool - 8-битное логическое значение7. char - 16-битный знак Юникода8. decimal - 128-битный точный дробный или целочисленный, который может представлять десятичные числа с 29 значащ ими цифрами.Особняком стоят (являются встроенными типами, но при этом с т.з. программиста являются классами?):9.
string - последовательность знаков10. object - базовый тип для всех остальных типовСтруктуры и классыВ C# структуры являются урезанной версией класса. Память под структуры наравне с простыми типами выделяется на стеке (если, конечно, они не являютсячастью объекта — память под объекты всегда выделяется на куче). Ограничения на структуры:1. Структура не может быть явно унаследована ни от какого класса или структуры, при этом все структуры неявно наследуют object.2. В структуре нельзя явно определить конструктор умолчания, неявно определяемый конструктор заполняет структуру неопределенными значениями.Типы значений (хранятся на стеке, если не являются полем класса)Все базовые, кроме object и string.Are you a developer? Try out the HTML to PDF APIopen in browser PRO versionpdfcrowd.comВсе базовые, кроме object и string.Перечисления (enum).Структуры (struct).Ссылочные типы[2] (значения, на которые указывает ссылочный тип (в частности, экземпляры классов), располагаются в куче)Класс.Массив (является объектом, экземпляром абстрактного класса Array).Интерфейс.И некоторые другие.Массивы[править]Длина массива — статический или динамический атрибут[править]Си++: длина массива - только статический атрибут.Оберон, Модула-2: динамический атрибут только для формальных параметров, в остальных случаях - статический.Ада, Java, C#: может быть и тем и другим.Замечание из методички:в языках Оберон и Модула-2 длина формальных параметров — открытых массивов является динамическим атрибутом.В других случаях длина массива — статический атрибут.В Аде формальные параметры неограниченных типов-массивов также имеют динамический атрибут-длину (равно как и динамические массивы-локальныепеременные).Пример динамического массива в языке Java (или C#):void f(int N) {byte [] dynArray = new byte [N];// ...обработка ...}ОБЕРОН И ОБЕРОН-2[править]Элементы массива обозначаются индексами, которые являются целыми числами от 0 до длины массива минус 1.ТипМассив = ARRAY [Длина {"," Длина}] OF Тип.Длина = КонстантноеВыражение.Тип видаARRAY L0, L1, ..., Ln OF Tпонимается как сокращ ениеARRAY L0 OFARRAY L1 OF...ARRAY Ln OF Topen in browser PRO versionAre you a developer? Try out the HTML to PDF APIpdfcrowd.comМассивы, объявленные без указания длины, называются открытыми массивами.
Они могут использоваться только в качестве базового типа указателя, типаэлементов открытых массивов и типа формального параметра. Длина формальных параметров — открытых массивов является динамическим атрибутом.Modula-2[править]Массивы как в Паскале (только помним про регистрозависимость: все ключевые слова IN CAPITALS).Пример объявления массиваVARa: ARRAY [-1..100] OF ARRAY [1..10] OF INTEGER;Для передачи массива в качестве параметра (и только для этого) используется т.н. открытый (или гибкий) массив X: ARRAY OF T. Индексы будут отображены на0..HIGH(X).PROCEDURE SCAL(VAR x,y: ARRAY OF REAL): REAL; (* Зачем здесь VAR, не знаю.
Должно быть можно без него. *)=============================================VARa: ARRAY [0..N - 1] OF REAL;b: ARRAY [1..N] OF REAL;=============================================SCAL(a, b);Управление памятью[править]Классы памяти[править]Статическая Всё что связано со словом «статический» размещ ается в блоке статической памяти. Время жизни – от начала программы либо момента первоговхода в блок, и до конца программы.Квазистатическая Квазистатическая память связана с понятием блока: переменные связана с этим блоком (от момента объявления, точнее, прохода code flowчерез объявление, до выхода из блока).
Размещ аются в стеке. Ещ е автоматической называют (автоматическая переменная).Динамическая Время жизни зависит от процедур (ручное управление памятью) или от сборщ ика мусора.Указатели[править]Ада, C, C++, C#, Delphi, Оберон, МодулаУказатели языка Ада 83 ссылаются только на объекты из динамической памяти.
Указатель языка Си++ может ссылаться на любой объект данных (динамический,локальный, статический), что может приводить к труднообнаружимым ошибкам.Также в языке Ада отсутствует адресная арифметика (арифметические операции над указателями), что также уменьшает вероятность появления ошибки работы спамятью.В языке Оберон(и Оберон-2) указатель может быть объявлен только на массив или запись.
ТипУказатель = POINTER TO Тип. Любая переменная-указатель можетпринимать значение NIL, которое не указывает ни на какую переменную вообщ е.В Modula-2 можно объявлять указатель на что угодно. При том как на переменные в динамической памяти, так и в статической. Есть адресная арифметика(ADDADR, SUBADR, DIFADR), преобразование типов указателей (CAST), разыменование (^), функция взятия адреса (ADR), аллокация и деаллокация (NEWDISPOSE или ALLOCATE-DEALLOCATE - два варианта), размер типа в байтах (TSIZE) и NIL.
В случае получения невалидного адреса, разыменования NIL и т.п.выдаётся ошибка.open in browser PRO versionAre you a developer? Try out the HTML to PDF APIpdfcrowd.comTYPETreePtr = POINTER TO TreeGlue;TreeGlue = RECORDkey: KeyType;left: TreePtr; (* left child *)right: TreePtr; (* right child *)END;В Java явных указателей нет.Преобразование типов[править]Явное преобразование типов[править]Преобразование типов называется явным, если оно указано программистом в исходном коде.Неявное преобразование типов[править]Преобразование типов называется неявным, если оно не указывается программистом, но, тем не менее, выполняется (в языках со статической типизацией —соответствующ ие конструкции подставляются на этапе компиляции).
В языках C[3], C#, Java, Pascal, Delphi, Modula-2, Оберон, Оберон-2 неявными могут бытьтолько расширяющ ие преобразования (иначе говоря, преобразования, к более общ ему типу [4]); в С++ — любые преобразования. В языке Ада неявныхпреобразований почти[5] нет.Неявное преобразование для пользовательских классов[править]Язык Java запрещ ает любые неявные преобразования между объектами классов (исключение составляют только неявные преобразования к стандартному типуString, разрешенные в некоторых контекстах).Языки C++ и C# разрешают неявные преобразования для классов, определяемых пользователем.В C++ преобразования определяются специальными функциями-членами: конструкторами преобразования и функциями преобразования.