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

Передача структуры в функцию

Непосредственный доступ к полям структуры – плохой стиль программирования. Все операции, которые разрешены применительно к структуре, должны быть реализованы в виде отдельных функций, тем самым имитируя работу со структурой как с единым целым.

Структуру можно передавать в функцию по значению, адресу или по ссылке: если поля передаваемой структуры не изменяются внутри функции – то структура передается по значению; если поля изменяются внутри функции – то в функцию передается адрес или ссылка структуры.

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

Массив структур передается по адресу (аналогично одномерному числовому массиву).

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

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

Пример 5. Написать программу с функциями:

  • Заполнения одной структуры данными с клавиатуры

  • Вывода одной структуры на экран монитора.

Проанализируем характеристики функций:

у первой функции поля переданной структуры изменяются (вследствие ввода), поэтому в функцию следует передать адрес или ссылку объявленной структуры;

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

.

Обе функции ничего не вычисляют, следовательно, результата не передают (функции типа void).

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

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

#include <iomanip>

struct Tel{

char name[25];

long number;

};

void InStruct(Tel & r);

void OutStruct(const Tel & r);

void main(void)

{

Tel tel;

cout<<»\nВведите структуру:»;

InStruct(tel);

cout<<”\nВаша структура:»;

OutStruct(tel);

}

/* Функция заполнения структуры. Исходное данное – ссылка на структуру */

void InStruct(Tel &r)

{

cout<<”nВведите фамилию ”;

cin>>r.name;

cout<<“Введите номер телефона ”;

cin>>r.number;

return;

}

/* Функция вывода структуры. Исходное данное – ссылка на неизменяемый объект */

void OutStruct(const Tel & r)

{

cout<<setw(20)<<r.name<<setw(10)<< r.number<<endl;

return;

}

Двоичный ввод-вывод структур

Хранение большого количества структур на диске удобнее всего осуществлять в двоичном виде, т.к. при этом:

  • Со структурой обращаемся как с единым целым;

  • При вводе-выводе не тратится время на преобразование данных из символьной формы в двоичную и наоборот;

  • При отсутствии вышеуказанного преобразования не происходит потеря точности вещественных чисел;

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

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

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