Помощь в написании студенческих работ
Антистрессовый сервис

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

Реферат Купить готовую Узнать стоимостьмоей работы

Учтено, что конструкция языка активно используется тогда, когда она не только изящно записывается на нем, но и вполне по средствам обычным программам. В проекте С++ особое внимание уделяется структурированию программы. Это вызвано увеличением размеров программ со времени появления С. Небольшую программу (скажем, не более 1000 строк) можно заставить из упрямства работать, нарушая все правила… Читать ещё >

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

Содержание

  • 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 строк плохая структура, то вы обнаружите, что новые ошибки появляются в ней так же быстро, как удаляются старые. С++ создавался с целью, чтобы большую программу можно было структурировать таким образом, чтобы одному человеку не пришлось работать с текстом в 25 000 строк. В настоящее время можно считать, что эта цель полностью достигнута.

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

Бьерн Страуступ «Язык программирования С++» — СПб Питер, 2007 г.

Герберт Шилдт «Искусство программирования на С++» — СПб Питер, 2005 г.

Крупник А.Б. «Изучаем С++» — Москва, 2003 г.

[Герберт Шилдт «Искусство программирования на С++», СПб Питер, 2005, стр. 56]

[Бьерн Страуступ «Язык программирования С++», СПб Питер, 2007, стр. 85−108, ]

[Крупник А.Б. «Изучаем С++», Москва, 2003, стр. 45−76, ]

Показать весь текст

Список литературы

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

ИЛИ