МегаПредмет

ПОЗНАВАТЕЛЬНОЕ

Сила воли ведет к действию, а позитивные действия формируют позитивное отношение


Как определить диапазон голоса - ваш вокал


Игровые автоматы с быстрым выводом


Как цель узнает о ваших желаниях прежде, чем вы начнете действовать. Как компании прогнозируют привычки и манипулируют ими


Целительная привычка


Как самому избавиться от обидчивости


Противоречивые взгляды на качества, присущие мужчинам


Тренинг уверенности в себе


Вкуснейший "Салат из свеклы с чесноком"


Натюрморт и его изобразительные возможности


Применение, как принимать мумие? Мумие для волос, лица, при переломах, при кровотечении и т.д.


Как научиться брать на себя ответственность


Зачем нужны границы в отношениях с детьми?


Световозвращающие элементы на детской одежде


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


Как слышать голос Бога


Классификация ожирения по ИМТ (ВОЗ)


Глава 3. Завет мужчины с женщиной


Оси и плоскости тела человека


Оси и плоскости тела человека - Тело человека состоит из определенных топографических частей и участков, в которых расположены органы, мышцы, сосуды, нервы и т.д.


Отёска стен и прирубка косяков Отёска стен и прирубка косяков - Когда на доме не достаёт окон и дверей, красивое высокое крыльцо ещё только в воображении, приходится подниматься с улицы в дом по трапу.


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

Краткие теоретические положения





Лабораторная работа 10. Типы данных, определяемые пользователем

Цель работы: Изучение возможности переименования типов, способов объявления и использования перечислимых типов, структур и объединений в языке С++.

Краткие теоретические положения

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

Переименование типов.Любому типу в С можно присвоить простое имя или переименовать его. Это делается с помощью ключевого слова typedef:

typedef тип новое_имя_типа;

или

typedef тип новое_имя_типа [размер_массива][...];

для типов-массивов. Кроме того, можно вводить имена для типов указателей на функцию и т. п. Примеры:

typedef short Arrlndex; // Псевдоним для short.

typedef char MessageStr[80]; // Имя типа для массивов char[80].

typedef int *IPtrFunc(void); // Функция, возвращающая указатель на int.

typedef int (*IFuncPtr)(void); // Указатель на функцию,

//возвращающую int.

В общем, typedef является средством упрощения записи операторов объявления переменных.

Перечислимые типы. Ключевое слово enum позволяет описать перечислимый тип, представляющий переменные, которые могут принимать значения из заданного набора целых именованных констант. Определение перечислимого типа выглядит так:

enum имя-этикетка {имя_константы [= значение], ...};

Значение равно по умолчанию нулю для первого из перечислителей (так обычно называют определяемые в enum константы). Любая другая константа, для которой значение не указано, принимается равной значению предыдущей константы плюс единица. Например:

enum Status { Success = 1,

Wait, Proceed,

Error = -1

};

В операторе enum после закрывающей фигурной скобки можно сразу объявить несколько переменных данного типа, например, так:

enum Status ProclStatus, Proc2Status;

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

typedef enum _Status {Success = 1,

Wait, Proceed,

Error = -1 } Status;

В этом случае Status будет полноценным именем перечислимого типа.

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

struct Имя_типа {определения_элементов} [переменные];

Вот пример структуры, предназначенной для хранения основных сведений о человеке:

struct Person

{char lastName[32]; // Фамилия.

char firstName[32]; // Имя.

short age; // Возраст.

long phoneNum; // Телефон как длинное целое.

} aPerson; // Объявляем переменную типа struct Person.

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

struct Person P1, P2;

Правила С++ разрешают ключевое слово struct опускать и писать:

Person P1, P2;

Для доступа к отдельным элементам структуры (полям) имеются две операции: точка и стрелка, за которыми следует имя элемента. С именем переменной применяется точка, с указателем — стрелка. Имея в виду предыдущее определение, можно было бы написать:



P1.age=20;

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

Person P1={“Иванов”, “Петр”, 20, 2562525};

В программе можно объявить указатель на структуру: Person *pntP1, P1;

Тогда после выполнения оператора присваивания: pntP1=&P1;

к каждому элементу структурной переменной можно обращаться тремя способами:

P1.lastName или (*pntP1).lastName или pntP1->lastName

Битовые поля.В качестве элементов структуры можно определять битовые поля. Для них задается ширина поля в битах, и компилятор отводит под элемент ровно столько бит, сколько указано. Несколько битовых полей может быть таким образом упаковано в одном слове. Синтаксис битового поля:

тип [имя поля]: ширина поля;

Тип поля может быть int или unsigned int. Доступ к битовым полям осуществляется так же, как и к регулярным элементам структуры. Если имя_поля отсутствует, место под поле отводится, но оно остается недоступным. Это будут просто “заполняющие” биты. Пример описания структуры, в битовое поле имеет минимальную величину – 1 бит:

struct onebit {unsigned bit:1;

} cod;

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

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

Объединения.Объединения, определяемые с помощью ключевого слова union, похожи по своему виду на структуры:

union имя_объединения {список_элементов] [переменные];

Отличие состоит в том, что все элементы объединения занимают одно и то же место в памяти, они перекрываются. Компилятор отводит под объединение память, достаточную для размещения наибольшего элемента.

Объединения полезны, когда требуется обеспечить своего рода “полиморфное поведение” некоторого объекта. Например, вы хотите определить тип, реализующий представление различных геометрических фигур — прямоугольников, окружностей, линий, многоугольников. В зависимости от того, чем конкретно является данная фигура, для ее описания необходимы различные наборы значений. Круг описывается иначе, чем многоугольник и т. п. И вот из структур, описывающих различные фигуры, можно в свою очередь составить обобщенный тип-объединение, который будет обрабатываться различно в зависимости от значения специального поля, определяющего род фигуры. В то же время на все фигуры можно будет ссылаться через указатели одного и того же типа, что, в частности, позволит составлять динамические связанные списки из любых фигур.

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

 

Порядок выполнения работы





©2015 www.megapredmet.ru Все права принадлежат авторам размещенных материалов.