Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Доступ к полям вложенных структур






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

dining.length.feet = 13;

В этом операторе dining — имя структурной переменной, как и раньше; Length — имя поля внешней структуры Room; feet — имя поля внутренней струк­туры Distance. Таким образом, данный оператор берет поле feet поля Length пере­менной dining и присваивает этому полю значение, равное 13.

ОПРЕДЕЛЕНИЕ

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

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

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

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

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

· Анонимное объединение представляет собой объединение, у которого нет имени (тэга).

 

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

union distance

{
int miles;
long meters;
};

union tank{ struct { int x, y; int fuel; }; int t[3]; };

Во-первых мы заменили struct на union (union - объединение). Внутри объединения расположена безымянная структура в которой определены все те переменные, которые были в структуре tank.

После безымянной структуры определён массив целых чисел из трёх элементов.

Теперь создадим переменную и обратимся к её полям:

tank t34; t34.x = 5; t34.y = 1; t34.fuel = 20; cout < < t34.t[0] < < " \n"; cout < < t34.t[1] < < " \n"; cout < < t34.t[2] < < " \n";

На экран будет выведено:

5120

Дело в том, что x и t[0] - разные имена одного и того же участка памяти

А что будет если не определять безымянную структуру, а переменные располагать следующим образом:

union tank{ int x; int y; int fuel; int t[3]; };

Ничего хорошего из этого не выйдет. Здесь x, y, fuel и t[0] - имена одного участка памяти.

В будущем мы будем использовать объединения следующим образом:

struct tank{ union { struct { int x, y; int fuel; }; int t[3]; }; };

Но вместо слово struct в первой строке будет стоять class. Сейчас вот этот вариант (struct tank) и предыдущий (union tank) работают одинаково.

Применение объединений очень сильно ограничено. Мы их рассмотрели, так как они особенно часто встречаются в математических библиотеках.

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

Так как объединение хранит и использует всегда одно поле их множества на выбор, то возникает вопрос о выделении памяти под это поле. Тут принцип понятный - выбирается наибольший из типов данных.

 

ПРЕПРОЦЕССОРНЫЕ СРЕДСТВА

Препроцессорная обработка (макрообработка) -- это преобразование текста путем замены препроцессорных переменных их значениями и выполнения препроцессорных операторов (директив препроцессора).

В общем случае препроцессорные средства включают:

- определение препроцессорных переменных и присвоенных им значений;

- средства управления просмотром преобразуемого текста;

- правила подстановки значений макропеременных.

ПРЕПРОЦЕССОРНЫЕ СРЕДСТВА

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

# include имя файла

Если включаемый файл находится в одном из оглавлений, указываемых в установках интегрированной среды в пункте options-directory-include, где можно указать несколько путей, разделяя их точкой с запятой, имя файла заключается в уголковые кавычки, например

# include < iostream.h>

в остальных случаях указывается полный путь к включаемому файлу в кавычках:

# include “c: \myinclud\includ1.h”

При включении файла на место директивы #include вставляется текст из этого файла, а последующие строки исходного файла сдвигаются вниз, после чего вставленный текст сканируется препроцессором.

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






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.