![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Доступ к полям вложенных структур
Если одна структура вложена в другую, то для доступа к полям внутренней структуры необходимо дважды применить операцию точки (.):
В этом операторе dining — имя структурной переменной, как и раньше; Length — имя поля внешней структуры Room; feet — имя поля внутренней структуры Distance. Таким образом, данный оператор берет поле feet поля Length переменной dining и присваивает этому полю значение, равное 13. ОПРЕДЕЛЕНИЕ · Объединения C++ очень похожи на структуры, за исключением того, как C++ хранит их в памяти; кроме того, объединение может хранить значение только для одного элемента в каждый момент времени. · Объединение представляет собой структуру данных, подобную структуре C++, и состоит из частей, называемых элементами. · Объединение определяет шаблон, с помощью которого программы далее объявляют переменные. · Для обращения к определенному элементу объединения ваши программы используют оператор C++ точку. · Чтобы изменить значения элемента объединения внутри функции, ваша программа должна передать переменную объединения в функцию с помощью адреса. · Анонимное объединение представляет собой объединение, у которого нет имени (тэга).
Внутри ваших программ объединения C++ очень похожи на структуры. Например, следующая структура определяет объединение с именем distance, содержащее два элемента: union distance { Во-первых мы заменили 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";На экран будет выведено: Дело в том, что 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 вставляется текст из этого файла, а последующие строки исходного файла сдвигаются вниз, после чего вставленный текст сканируется препроцессором. Отметим, что директивы препроцессора всегда записывается с новой строки и первым символом директивы должен быть знак #, которому могут предшествовать только пробелы и знаки табуляции. Концом текста директивы служит конец строки. Если директива не помещается в одной строке, в конце строки ставится знак \ и директива продолжается на следующей строке. Количество строк продолжения не ограничивается.
|