Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KL_PrJAVU230200.doc
Скачиваний:
22
Добавлен:
17.03.2015
Размер:
702.46 Кб
Скачать

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

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

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

4.1. Структуры

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

Для использования структур в программе необходимо:

  • Описать шаблон для структуры

  • Объявить переменные, соответствующие этому шаблону

  • Научиться работать со структурной переменной через поля структуры или как с единым целым.

Шаблон структуры

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

struct Tel {

char name[25]; //имя абонента

long number; //номер телефона

};

Данный текст описывает тип структуры с именем шаблона Tel, состоящий из двух полей: строки name и целой переменной number типа long.

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

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

Установка шаблона не вызывает никаких действий в программе, машина просто будет «узнавать» созданный нами тип, который называется Tel.

Структурные переменные

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

Следующий оператор объявляет простую структурную переменную, массив структур, указатель на структуру:

Tel tel1, tel2[5], *tel3;

Инициализация структуры

Объявить структурную переменную можно с инициализацией, например, объявим массив из двух структур с инициализацией:

Teltel[2]={

"Иванов Ф.А.", 456756,

"Петров В.П.", 632345

};

Доступ к полям структуры

Обращаться со структурной переменной можно как с единым целым или на уровне полей структуры. Например, операция ввода-вывода структур производится на уровне полей, а копируются структуры как единое целое.

При использовании имени структурной переменной доступ к полям структуры осуществляется через символ “.” (точка), а при использовании адреса – через символ “- >” (стрелочка).

Продемонстрируем правила обработки структурной переменной (в дальнейшем – структуры) на примерах.

Пример 1. Объявить две структуры описанного ранее шаблона, ввести данные с клавиатуры в первую структуру, скопировать их во вторую структуру, а затем из второй структуры вывести их на экран монитора.

// Обращение к полям структуры через имя переменной

#include<iostream> //подключение системных средств для

using namespace std; //возможности использовать потоки ввода-вывода

struct Tel{

char name[25];

long number;

};

void main(void)

{

Tel tel1, tel2;

cout<<"\nвведите фамилию абонента";

cin>>tel1.name;

cout<<"введите его номер";

cin>>tel1.number;

tel2=tel1; //работа со структурой как с единым целым

cout<<"\nВведено:"<<endl;

cout<<"Фамилия : “<< tel2.name;

cout<<” номер: "<<tel2.number;

}

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

// Обращение к полям структуры через указатель

#include<iostream> //подключение системных средств для

using namespace std; //возможности использовать потоки ввода-вывода

struct Tel{

char name[25];

long number;

};

void main(void)

{

Tel*tel1, *tel2;

/* Выделение памяти для структуры */

tel1=new Tel;

tel2=new Tel;

cout<<"\nвведите фамилию абонента";

cin>>tel1->name;

cout<<"введите его номер";

cin>>tel1->number;

*tel2= *tel1; // нельзя так же сравнивать структуры

cout<<"\nВведено:"<<endl;

cout<<"Фамилия : “<< tel2->name;

cout<<” номер: "<<tel2->number;

}

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