Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
voprosy_1.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
215.65 Кб
Скачать

Технологии программирования.

  1. Типы данных в языках программирования на примере C++, C#. Упаковка и распаковка объектов.

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

Стандарт языка C++ включает следующий набор фундаментальных типов.

  • Логический тип (bool).

  • Символьный тип (char).

  • Целые типы. Целые типы могут быть одного из трех размеров – short, int, long, сопровождаемые описателем signed или unsigned, который указывает, как интерпретируется значение, - со знаком или без оного.

  • Типы с плавающей точкой. Эти типы также могут быть одного из трех размеров – float, double, long double. Кроме того, в языке есть тип void, используемый для указания на отсутствие информации.

  • Указатели (например, int* – типизированный указатель на переменную типа int).

  • Ссылки (например, double& – типизированная ссылка на переменную типа double).

  • Массивы (например, char[] – массив элементов типа char).

  • Перечислимые типы (enum) для представления значений из конкретного множества.

  • Структуры (struct).

  • Классы.

Первые три вида типов называются интегральными или счетными. Значения их перечислимы и упорядочены. Целые типы и типы с плавающей точкой относятся к арифметическому типу. Типы подразделяются также на встроенные и типы, определенные пользователем.

Эта схема типов сохранена и в языке C#. Однако здесь на верхнем уровне используется и другая классификация, носящая для C# принципиальный характер. Согласно этой классификации все типы можно разделить на четыре категории:

  • Типы-значения (value), или значимые типы.

  • Ссылочные (reference).

  • Указатели (pointer).

  • Тип void.

Эта классификация основана на том, где и как хранятся значения типов. Для ссылочного типа значение задает ссылку на область памяти в "куче", где расположен соответствующий объект. Для значимого типа используется прямая адресация, значение хранит собственно данные, и память для них отводится, как правило, в стеке.

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

Особый статус имеет и тип void, указывающий на отсутствие какого-либо значения.

В языке C# жестко определено, какие типы относятся к ссылочным, а какие – к значимым. К значимым типам относятся: логический, арифметический, структуры, перечисление. Массивы, строки и классы относятся к ссылочным типам.

Язык C# в большей степени, чем язык C++, является языком объектного программирования. В языке C# сглажено различие между типом и классом. Все типы – встроенные и пользовательские - одновременно являются классами, связанными отношением наследования. Родительским, базовым классом является класс Object. Все остальные типы или, точнее, классы являются его потомками, наследуя методы этого класса.

Иногда может потребоваться хранить значимый тип в управляемой куче с сохранением его адреса в ссылочной переменной. Ссылка должна иметь тип object, поскольку класс object является порождающим для всех типов C#. Такой процесс называется упаковкой значимого объекта. Синтаксис упаковки:

int i = 123;

object o = i;

Среда выполнения сама зарезервирует место в динамической области памяти и скопирует туда все данные значимого типа.

Упакованный объект можно передать как ссылочный параметр любому внешнему методу. Обратный процесс получения значимого объекта по его ссылке называется распаковкой. По ссылке упакованного объекта нельзя обратиться к его членам. Для этого объект нужно распаковать. Синтаксис распаковки:

i = (int)o;

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]