Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Использование элементов структуры



Структура позволяет вашим программам группировать информацию, называемую элементами, в одной переменной. Чтобы присвоить значение элементу или обратиться к значению элемента, используйте оператор C++точку (.). Например, следующие операторы присваивают значения различным элементам переменной с именем worker тута employee;

worker.employee_id = 12345;

worker.salary = 25000.00;

worker.оffice_number = 102;

Для обращения к элементу структуры укажите имя переменной, за которым следует точка и имя элемента. Следующая программа EMPLOYEE.CPP иллюстрирует использование структуры типа employee:

#include < iostream.h>

#include < string.h>

void main(void)

{
struct employee

{
char name [64];
long employee_id;
float salary;
char phone[10];
int office_number;
} worker;

// Копировать имя в строку strcpy(worker.name, «Джон Дой»);

worker.employee_id = 12345;
worker.salary = 25000.00;
worker.office_number = 102;

// Копировать номер телефона в строку strcpy(worker.phone, «555-1212″ );

cout < < «Служащий: » < < worker.name < < endl;
cout < < «Телефон: » < < worker.phone < < endl;
cout < < «Номер служащего: » < < worker.employee_id < < endl;
cout < < «Оклад: » < < worker.salary < < endl;
cout < < «Офис: » < < worker.office_number < < endl;
}

Как видите, присваивание целому элементу и элементу с плавающей точкой очень просто. Программа использует оператор присваивания, чтобы присвоить значение соответствующему элементу. Однако обратите внимание на использование функции strcpy для копирования символьной строки в элементы name и phone. Если вы не инициализируете элементы при объявлении переменной типа данной структуры, вы должны копировать символьные строки в символьно-строковые элементы.

Объявление переменных структуры

Структуры C++ позволяют вашим программам группировать в одну переменную связанную информацию различных типов. Структура определяет шаблон для объявлений будущих переменных вашей программы. Каждая структура имеет уникальное имя (иногда называемое тэгом). Используя имя структуры, вы можете объявить переменные типа данной структуры. Биты информации, хранящиеся в структуре, называются элементами. Чтобы использовать или присвоить значение элементу, используйте оператор C++ точку, как показано ниже:

variable.member = some_value;
some_variable = variable.other_member;

СТРУКТУРЫ И ФУНКЦИИ

Если функция не изменяет структуру, вы можете передать структуру в функцию по имени. Например, следующая программа SHOW_EMP.CPPиспользует функцию show_employee для вывода элементов структуры типаemployee:

#include < iostream.h>

#include < string.h>

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;
}

void main(void)

{
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);
}

Как видите, программа передает переменную типа данной структурыworker в функцию show__employee по имени. Далее функцияshow_employee выводит элементы структуры. Однако обратите внимание, что программа теперь определяет структуру employee вне main и до функции show_employee. Поскольку функция объявляет переменнуюworker типа employee, определение структуры employee должно располагаться до функции.

Функции, изменяющие элементы структуры

Как вы знаете, если функция изменяет параметр, вам следует передавать этот параметр в функцию с помощью адреса. Если функция изменяет элемент структуры, вы должны передавать эту структуру в функцию с помощью адреса, Для передачи переменной типа структуры с помощью адреса вы просто предваряете имя переменной оператором адреса C++ (& ), как показано ниже:

some_function(& worker);

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

pointer_variable-> member = some_value;

Например, следующая программа CHG_MBR.CPP передает структуру типа 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;
}

void main(void)

{
employee worker;

// Копировать имя в строку strcpy(worker.name, «Джон Дой»);

get_employee_id(& worker);
cout < < «Служащий: » < < worker, name < < endl;
cout < < «Номер служащего: » < < worker.employee_id < < endl;
}

Как видите, внутри main программа передает переменную worker типа структуры в функцию get_employee_id с помощью адреса. Внутри функции gel_employee_id значение, введенное пользователем, присваивается элементу employee_id с помощью следующего оператора:

cin > > worker-> employee_id;

Работа с указателями на структуры

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

value = variable-> member;
variable-> other_member = some_value;

ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ

Структуры позволяют вашим программам группировать связанные части информации различных типов в одной и той же переменной. Комбинируя подобным образом данные в одной переменной, ваши программы могут лучше представлять объекты, состоящие из двух или более частей, например, информацию о служащих, книгах и т. д. Из урока 19 вы узнаете, как использовать объединения C++, которые, подобно структурам, используют элементы, но в отличие от структур по-другому хранятся в памяти. Независимо от количества элементов объединение может хранить только одно значение в каждый момент времени. Прежде чем вы приступите к уроку 19, убедитесь, что освоили следующие основные концепции:

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

2. Части информации, из которых состоит структура, называются элементами.

3. Структура определяет шаблон, который ваши программы могут использовать для объявления переменных.

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

5. Чтобы присвоить значение или обратиться к значению элемента структуры, ваши программы используют оператор точку, например variable.member.

6. Если функция изменяет значение элемента структуры, переменная структуры должна быть передана в функцию с помощью адреса.

7. Если функция использует указатель на структуру, функция должна использовать формат variable-> memberдля обращения к элементу структуры.

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

  • Объединения C++ очень похожи на структуры, за исключением того, как C++ хранит их в памяти; кроме того, объединение может хранить значение только для одного элемента в каждый момент времени.
  • Объединение представляет собой структуру данных, подобную структуре C++, и состоит из частей, называемых элементами.
  • Объединение определяет шаблон, с помощью которого программы далее объявляют переменные.
  • Для обращения к определенному элементу объединения ваши программы используют оператор C++ точку.
  • Чтобы изменить значения элемента объединения внутри функции, ваша программа должна передать переменную объединения в функцию с помощью адреса.
  • Анонимное объединение представляет собой объединение, у которого нет имени (тэга).

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

КАК C++ ХРАНИТ ОБЪЕДИНЕНИЯ

Внутри ваших программ объединения C++ очень похожи на структуры. Например, следующая структура определяет объединение с именемdistance, содержащее два элемента:

union distance

{
int miles;
long meters;
};

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

union distance

{
union distance

{
int miles; int miles;
long meters; long meters;
} japan, germany, franee;
};
distance japan, germany, franee;

Как видите, данное объединение содержит два элемента: miles и meters.Эти объявления создают переменные, которые позволяют вам хранить расстояния до указанных стран. Как и для структуры, ваша программа может присвоить значение любому элементу. Однако в отличие от структуры значение может быть присвоено только одному элементу в каждый момент времени. Когда вы объявляете объединение, компилятор C++ распределяет память для хранения самого большого элемента объединения. В случае объединения distance компилятор распределяет достаточно памяти для хранения значения типа long, как показано на рис. 19.

Рис. 19. C++ распределяет память, достаточную для хранения только самого большого элемента объединения.

Предположим, что ваша программа присваивает значение элементу miles, как показано ниже:

japan.miles = 12123;

Если далее ваша программа присваивает значение элементу meters, значение, присвоенное элементу miles, теряется.

Следующая программа USEUNION.CPP иллюстрирует использование объединения distance. Сначала программа присваивает значение элементу

miles и выводит это значение. Затем программа присваивает значение элементу meters. При этом значение элемента miles теряется:

#include < iostream.h>

void main(void)

{
union distance

{
int miles;
long meters;
} walk;

walk.miles = 5;
cout < < «Пройденное расстояние в милях » < < walk.miles < < endl;
walk.meters = 10000;
cout < < «Пройденное расстояние в метрах » < < walk.meters < < endl;
}

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

Объединение хранит значение только одного элемента в каждый момент времени

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

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

ПРЕДСТАВЛЕНИЕ ОБ АНОНИМНЫХ ОБЪЕДИНЕНИЯХ C++

Анонимное объединение представляет собой объединение, у которого нет имени. C++ предоставляет анонимные объединения, чтобы упростить использование элементов объединений, предназначенных для экономии памяти или создания псевдонимов для определенного значения. Например, предположим, что вашей программе требуются две переменные miles и meters. Кроме того, предположим, что программа использует только одну из них каждый данный момент времени. В этом случае программа могла бы использовать элементы объединения, подобного уже обсуждавшемуся объединению distance, а именноname.miles и name.meters. Следующий оператор создает анонимное (безымянное) объединение:

union

{
int miles;
long meters;
};

Как видите, объявление не использует имя объединения и не объявляет переменную объединения. Программа, в свою очередь, может обращаться к элементам с именами miles и meters без помощи точки. Следующая программа ANONYM.CPP создает анонимное объединение, которое содержит элементы miles и meters. Обратите внимание, что программа трактует элементы как обычные переменные. Однако различие между элементами и обычными переменными заключается в том, что, когда вы присваиваете значение любому из этих элементов, значение другого элемента теряется:

#include < iostream.h>

void main(void)

{
union

{
int miles;
long meters;
};

miles = 10000;
cout < < «Значение в милях » < < miles < < endl;
meters = 150000;
cout < < «Значение в метрах » < < meters < < endl;
}

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

Анонимные объединения позволяют вашим программам экономить пространство

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

union

{
char short_name[13];
char long_name[255];
};

ЧТО ВАМ НЕОБХОДИМО ЗНАТЬ

Из этого урока вы узнали, как создать объединение внутри вашей программы. Вы уже поняли, что формат объединения подобен формату структуры. Однако способ, с помощью которого C++ хранит объединения, очень отличается от способа хранения структуры. Из урока 10 вы впервые узнали, что для того, чтобы функция изменила параметр, вашей программе следует передать этот параметр в функцию с помощью указателя (или адреса памяти). Начиная с десятого урока, ваши программы использовали указатели для массивов и символьных строк. В уроке 20 вы рассмотрите операции с указателями C++ с другой стороны. До изучения урока 20 убедитесь, что вы освоили следующее:

1. Когда вы объявляете объединение, компилятор C++ распределяет память, достаточную для хранения только самого большого элемента объединения.

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

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

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

Как вы уже знаете, программы на C++ хранят переменные в памяти. Указатель представляет собой адрес памяти, который указывает (или ссылается) на определенный участок. Из урока 10 вы узнали, что для изменения параметра внутри функции ваша программа должна передать адрес параметра (указатель) в функцию. Далее функция в свою очередь использует переменную-указатель для обращения к участку памяти. Некоторые программы, созданные вами в нескольких предыдущих уроках, использовали указатели на параметры. Аналогично этому, когда ваши программы работают с символьными строками и массивами, они обычно используют указатели, чтобы оперировать элементами массива. Так как применение указателей является общепринятым, очень важно, чтобы вы хорошо понимали их использование. Таким образом, этот урок рассматривает еще один аспект применения указателей. К концу данного урока вы освоите следующие основные концепции:

  • Для простоты (для уменьшения кода) многие программы трактуют символьную строку как указатель и манипулируют содержимым строки, используя операции с указателями.
  • Когда вы увеличиваете переменную-указатель (переменную, которая хранит адрес), C++ автоматически увеличивает адрес на требуемую величину (на 1 байт для char, на 2 байта для int, на 4 байта для float и т.д.).
  • Ваши программы могут использовать указатели для работы с массивами целочисленных значений или значений с плавающей точкой.

Операции с указателями широко используются в C++. Выберите время для эксперимента с программами, представленными в этом уроке.


Поделиться:



Популярное:

  1. Cтадии развития организации, виды оргструктур, элементы организационной структуры
  2. G) Развитие инновационной инфраструктуры.
  3. I этап. Определение стратегических целей компании и выбор структуры управления
  4. I.5.Особенности этнической структуры населения Сербии в составе СФРЮ.
  5. II период – период усвоения грамматической структуры предложения
  6. II. СОЦИАЛЬНАЯ МОРФОЛОГИЯ ИЛИ ГРУППОВЫЕ СТРУКТУРЫ
  7. III. Вид работы: «Использование информационной базы данных»
  8. III. СОЦИАЛЬНАЯ СТАТИКА ИЛИ СТРУКТУРЫ КОММУНИКАЦИИ
  9. V. Использование психодиагностических методик
  10. А. Расчёт железобетонных элементов по первой группе
  11. Аварийные радиобуи EPIRB, SART. Назначение, использование, эксплуатационные проверки.
  12. Активное использование речевых средств и средств информационно- коммуникационных технологий (далее – ИКТ) для решения коммуникативных и познавательных задач.


Последнее изменение этой страницы: 2016-05-30; Просмотров: 814; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.047 с.)
Главная | Случайная страница | Обратная связь