Читайте также:
|
|
Структуру можно передавать в функцию и возвращать в качестве значения функции. Если функция не изменяет структуру, вы можете передать структуру в функцию по имени.
Пример. Следующая программа использует функцию show_employee для вывода элементов структуры типа employee:
#include <iostream>
#include <string>
struct employee
{
char name[64];
long employee_id;
float salary;
char phone[10];
int office_number;
};
void show_employee(employee worker)
{
cout << "Служащий: " << worker.name << endl;
cout << "Телефон: " << worker.phone << endl;
cout << "Номер служащего: " << worker. employee_id << endl;
cout << "Оклад: " << worker.salary << endl;
cout << "Офис: " << worker.office_number << endl;
}
int main()
{
employee worker;
// Копировать имя в строку
strcpy(worker.name, "Джон До");
worker.employee_id = 12345;
worker.salary = 25000.00;
worker.office_number = 102;
// Копировать номер телефона в строку
strcpy(worker.phone, "555-1212");
show_employee(worker);
return 0;
}
Как видите, программа передает переменную типа данной структуры worker в функцию show__employee по имени. Далее функция show_employee выводит элементы структуры. Однако обратите внимание, что программа теперь определяет структуру employee вне main и до функции show_employee. Поскольку функция объявляет переменную worker типа employee, определение структуры employee должно располагаться до функции.
Как вы знаете, если функция изменяет параметр, вам следует передавать этот параметр в функцию с помощью адреса. Если функция изменяет элемент структуры, вы должны передавать эту структуру в функцию с помощью адреса, Для передачи переменной типа структуры с помощью адреса вы просто предваряете имя переменной оператором адреса C++ (&), как показано ниже:
some_function(&worker);
Внутри функции, которая изменяет один или несколько элементов, вам следует работать с указателем. Если вы используете указатель на структуру, легче всего обращаться к элементам структуры, используя следующий синтаксис:
pointer_variable->member = some_value;
Пример. Следующая программа передает структуру типа employee в функцию с именем get_employee_id, которая запрашивает у пользователя идентификационный номер служащего и затем присваивает этот номер элементу структуры employee_id. Чтобы изменить элемент, функция работает с указателем на структуру:
#include <iostream.h>
#include <string.h>
struct employee
{
char name[64];
long employee_id;
float salary;
char phone[10];
int office_number;
};
void get_employee_id(employee *worker)
{
cout << "Введите номер служащего: ";
cin >> worker->employee_id;
}
int main()
{
employee worker;
// Копировать имя в строку
strcpy(worker.name, "Джон До");
get_employee_id(&worker);
cout << "Служащий: " << worker, name << endl;
cout << "Номер служащего: " << worker.employee_id << endl;
return 0;
}
Как видите, внутри main программа передает переменную worker типа структуры в функцию get_employee_id с помощью адреса. Внутри функции gel_employee_id значение, введенное пользователем, присваивается элементу employee_id.
Другие операции со структурами могут быть определены пользователем.
3.2. ФАЙЛЫ В C++
Файлом называют способ хранения информации на физическом устройстве. Файл — это понятие, которое применимо ко всему — от файла на диске до терминала.
Файл – именованный набор байтов, который может быть сохранен на некотором накопителе. Ну, теперь ясно, что под файлом понимается некоторая последовательность байтов, которая имеет своё, уникальное имя, например файл.txt. В одной директории не могут находиться файлы с одинаковыми именами. Под именем файла понимается не только его название, но и расширение, например: file.txt и file.dat - разные файлы, хоть и имеют одинаковые названия. Существует такое понятие, как полное имя файлов – это полный адрес к директории файла с указанием имени файла, например: D:\docs\file.txt. Важно понимать эти базовые понятия, иначе сложно будет работать с файлами.
В C++ отсутствуют операторы для работы с файлами. Все необходимые действия выполняются с помощью функций, включенных в стандартную библиотеку. Они позволяют работать с различными устройствами, такими, как диски, принтер, коммуникационные каналы и т.д. Эти устройства сильно отличаются друг от друга. Однако файловая система преобразует их в единое абстрактное логическое устройство, называемое потоком.
Текстовый поток — это последовательность символов. При передаче символов из потока на экран, часть из них не выводится (например, символ возврата каретки, перевода строки).
Двоичный поток — это последовательность байтов, которые однозначно соответствуют тому, что находится на внешнем устройстве.
Поток заканчивается признаком конца файла EOF, значение которого обычно -1 но в общем случае отличается от любого символа.
Дата добавления: 2014-12-19; просмотров: 84 | Поможем написать вашу работу | Нарушение авторских прав |