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

Заказать уникальный реферат
Тип работы: Реферат
Предмет: Программирование
  • 2020 страниц
  • 3 + 3 источника
  • Добавлена 25.10.2008
400 руб.
  • Содержание
  • Часть работы
  • Список литературы
  • Вопросы/Ответы
Оглавление

Введение
1.Типы данных определяемые пользователем
1.1.Перечислимые типы
1.2.Структуры
1.3.Битовые поля
1.4.Объединения
2.Структурируемые тип
3.Ссылочные типы и указатели.
3.1.Указатели
3.2.Ссылочные типы.
4.Типизированные константы
5.Совместимость и преобразование типов.
Заключение
Список используемой литературы

Фрагмент для ознакомления

Функциональную запись нельзя использовать для типов, которые не имеют простого имени. Например, чтобы преобразовать значение в тип указателя, надо или использовать приведение
char* p = (char*)0777;
или определить новое имя типа:
typedef char* Pchar;
char* p = Pchar(0777);
По мнению автора, функциональная запись в нетривиальных случаях предпочтительнее. Рассмотрим два эквивалентных примера:
Pname n2 = Pbase(n1->tp)->b_name; // функциональная запись
Pname n3 = ((Pbase)n2->tp)->b_name; // запись с приведением
Поскольку операция -> имеет больший приоритет, чем операция приведения, последнее выражение выполняется так:
((Pbase)(n2->tp))->b_name
Используя явное преобразование в тип указателя можно выдать данный объект за объект произвольного типа. Например, присваивание
any_type* p = (any_type*)&some_object; позволит обращаться к некоторому объекту (some_object) через указатель p как к объекту произвольного типа (any_type). Тем не менее, если some_object в действительности имеет тип не any_type, могут получиться странные и нежелательные результаты. Если преобразование типа не является необходимым, его вообще следует избегать. Программы, в которых есть такие преобразования, обычно труднее понимать, чем программы, их не имеющие. В то же время программы с явно заданными преобразованиями типа понятнее, чем программы, которые обходятся без таких преобразований, потому что не вводят типов для представления понятий более высокого уровня. Так, например, поступают программы, управляющие регистром устройства с помощью сдвига и маскирования целых, вместо того, чтобы определить подходящую структуру (struct) и работать непосредственно с ней. Корректность явного преобразования типа часто существенно зависит от того, насколько программист понимает, как язык работает с объектами различных типов, и какова специфика данной реализации языка. Приведем пример:
int i = 1;
char* pc = "asdf";
int* pi = &i;
i = (int)pc;
pc = (char*)i; // осторожно: значение pc может измениться.
// На некоторых машинах sizeof(int)
// меньше, чем sizeof(char*)
pi = (int*)pc;
pc = (char*)pi; // осторожно: pc может измениться
// На некоторых машинах char* имеет не такое
// представление, как int*
Для многих машин эти присваивания ничем не грозят, но для некоторых результат может быть плачевным. В лучшем случае подобная программа будет переносимой. Обычно без особого риска можно предположить, что указатели на различные структуры имеют одинаковое представление. Далее, произвольный указатель можно присвоить (без явного преобразования типа) указателю типа void*, а void* может быть явно преобразован обратно в указатель произвольного типа. В языке С++ явные преобразования типа оказывается излишними во многих случаях, когда в С (и других языках) они требуются. Во многих программах можно вообще обойтись без явных преобразований типа, а во многих других они могут быть локализованы в нескольких подпрограммах.
Заключение

С++ - язык общего назначения и задуман для того, чтобы настоящие программисты получили удовольствие от самого процесса программирования.
За исключением второстепенных деталей он содержит язык С как подмножество. Язык С расширяется введением гибких и эффективных средств, предназначенных для построения новых типов. Программист структурирует свою задачу, определив новые типы, которые точно соответствуют понятиям предметной области задачи. Такой метод построения программы обычно называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. С такими объектами можно работать надежно и просто даже в тех случаях, когда их тип нельзя установить на стадии трансляции. Программирование с использованием таких объектов обычно называют объектно-ориентированным. Если этот метод применяется правильно, то программы становятся короче и понятнее, а сопровождение их упрощается. В С++ нет типов данных и элементарных операций высокого уровня. Например, не существует типа матрица с операцией обращения или типа строка с операцией конкатенации. Если пользователю понадобятся подобные типы, он может определить их в самом языке. Программирование на С++ по сути сводится к определению универсальных или зависящих от области приложения типов. Хорошо продуманный пользовательский тип отличается от встроенного типа только способом определения, но не способом применения. Из языка исключались возможности, которые могут привести к накладным расходам памяти или времени выполнения, даже если они непосредственно не используются в программе. Например, было отвергнуто предложение хранить в каждом объекте некоторую служебную информацию. Если пользователь описал структуру, содержащую две величины, занимающие по 16 разрядов, то гарантируется, что она поместится в 32-х разрядный регистр. Язык С++ проектировался для использования в довольно традиционной среде, а именно: в системе программирования С операционной системы UNIX. Но есть вполне обоснованные доводы в пользу использования С++ в более богатой программной среде. Такие возможности, как динамическая загрузка, развитые системы трансляции и базы данных для хранения определений типов, можно успешно использовать без ущерба для языка. Типы С++ и механизмы упрятывания данных рассчитаны на определенный синтаксический анализ, проводимый транслятором для обнаружения случайной порчи данных. Они не обеспечивают секретности данных, и защиты от умышленного нарушения правил доступа к ним. Однако, эти средства можно свободно использовать, не боясь накладных расходов памяти и времени выполнения программы. Учтено, что конструкция языка активно используется тогда, когда она не только изящно записывается на нем, но и вполне по средствам обычным программам. В проекте С++ особое внимание уделяется структурированию программы. Это вызвано увеличением размеров программ со времени появления С. Небольшую программу (скажем, не более 1000 строк) можно заставить из упрямства работать, нарушая все правила хорошего стиля программирования. Однако, действуя так, человек уже не сможет справиться с большой программой. Если у вашей программы в 10 000 строк плохая структура, то вы обнаружите, что новые ошибки появляются в ней так же быстро, как удаляются старые. С++ создавался с целью, чтобы большую программу можно было структурировать таким образом, чтобы одному человеку не пришлось работать с текстом в 25000 строк. В настоящее время можно считать, что эта цель полностью достигнута.





Список используемой литературы

Бьерн Страуступ «Язык программирования С++» - СПб Питер, 2007 г.
Герберт Шилдт «Искусство программирования на С++» - СПб Питер, 2005 г.
Крупник А.Б. «Изучаем С++» - Москва, 2003 г.

[Герберт Шилдт «Искусство программирования на С++», СПб Питер,2005, стр. 56]
[Бьерн Страуступ «Язык программирования С++», СПб Питер, 2007, стр. 85-108, ]
[Крупник А.Б. «Изучаем С++», Москва, 2003, стр. 45-76, ]









2

Список используемой литературы

1.Бьерн Страуступ «Язык программирования С++» - СПб Питер, 2007 г.
2.Герберт Шилдт «Искусство программирования на С++» - СПб Питер, 2005 г.
3.Крупник А.Б. «Изучаем С++» - Москва, 2003 г.

Вопрос-ответ:

Какие типы данных можно определять пользователем?

Пользователь может определять такие типы данных как перечислимые типы, структуры, битовые поля и объединения.

Что такое структурируемый тип?

Структурируемый тип - это тип данных, который состоит из нескольких компонентов, каждый из которых имеет собственное имя и тип.

В чем разница между ссылочными типами и указателями?

Указатель - это переменная, которая содержит адрес ячейки памяти, а ссылочный тип - это тип данных, который хранит ссылку на объект в памяти.

Что такое типизированные константы?

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

Можно ли использовать функциональную запись для определения типов данных?

Нет, функциональную запись нельзя использовать для определения типов данных.

Какие типы данных могут быть определены пользователем?

Пользователь может определить свои перечислимые типы, структуры и объединения.

Что такое перечислимые типы?

Перечислимые типы - это типы данных, которые могут принимать одно из заданных пользователем значений.

Какие структурируемые типы данных существуют?

Структуры и объединения являются структурируемыми типами данных.

Что такое ссылочные типы и указатели?

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

Каким образом можно реализовать типизированные константы?

Типизированные константы могут быть реализованы с помощью препроцессорных директив или объявления констант.