пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

10.Языки программирования С и С++. Типы данных, определяемые пользователем (переименование типов, перечисление, структуры, объединения). Примеры. Структуры. Определение, инициализация, присваивание структур, доступ к элементам структур, указатели на структуры, битовые поля структур.

Переименования типов служит для создания синонимов для имени типа. Применять его можно с любыми типами, но особенно он помогает при работе со структурными типами и со сложными в понимании типами указателей. Данный оператор имеет синтаксис: typedef тип новое_имя [ размерность ]; Кроме задания типам с длинными описаниями более коротких псевдопимов, typedef используется для облегчения переносимости программ: если машинно-зависимые типы объявить с помощью операторов typedef, при переносе программы потребуется внести изменения только в эти операторы.

Для случаев, когда необходимо определить несколько именованных констант, для которых требуется, чтобы все они имели различные значения (при этом конкретные значения могут быть не важны), удобно воспользоваться перечисляемым типом данных, все возможные значения которого задаются списком целочисленных констант – перечисление. Перечисление имеет синтаксис: enum [ имя_типа ] /** список_констант **/; Имя типа задается в том случае, если в программе требуется определять переменные этого типа. Компилятор обеспечивает, чтобы эти переменные принимали значения только из списка констант. Константы должны быть целочисленными и могут инициализироваться обычным образом. При отсутствии инициализатора первая константа обнуляется, а каждой следующей присваивается на единицу большее значение, чем предыдущей. При выполнении арифметических операций перечисления преобразуются в целые. Поскольку перечисления являются типами, определяемыми пользователем, для них можно вводить собственные операции.

В отличие от массива, все элементы которого однотипны, структура может содержать элементы разных типов. В языке C++ структура является видом класса и обладает всеми его свойствами, но во многих случаях достаточно использовать структуры так, как они определены в языке С: struct имя_структуры/** поля_структуры **/; В программе структуры используются аналогичным образом, что и встроенные типы данных. Обращение к полям структуры происходит аналогично доступа к полям объектных типов в Паскале: имя_переменной_структуры.поле_структуры (пример: bus.fare). Для инициализации структуры значения ее элементов перечисляют в фигурных скобках в порядке их описания. При инициализации массивов структур следует заключать в фигурные скобки каждый элемент массива. Если в программе определен указатель на структуру, возможен доступ при помощи специальной операции доступа к элементу структуры ->

struct bus
  {  int number;
    char name;
   float fuel;  };
 

Битовые поля — это особый вид полей структуры. Они используются для плотной упаковки данных, например, флажков типа «да/нет». Минимальная адресуемая ячейка памяти — 1 байт, а для хранения флажка достаточно одного бита. При описании битового поля после имени через двоеточие указывается длина поля в битах (целая положительная константа) Битовые поля могут быть любого целого типа. Имя поля может отсутствовать, такие поля служат для выравнивания на аппаратную границу. Доступ к полю осуществляется обычным способом — по имени. Адрес поля получить нельзя, однако в остальном битовые поля можно использовать точно так же, как обычные поля структуры. Следует учитывать, что операции с отдельными битами реализуются гораздо менее эффективно, чем с байтами и словами, так как компилятор должен генерировать специальные коды, и экономия памяти под переменные оборачивается увеличением объема кода программы. Размещение битовых полей в памяти зависит от компилятора и аппаратуры.

#include <iostream>
#include <bitset>   // заголовочный файл битовых полей
#include <iomanip>  // для манипулятора setw()
using namespace std;
 
int main()
{
    bitset<8> number;
 
    cout << "Двоичное представление некоторых чисел:\n";
    forint i = 0; i < 21; i++) {
        number = i;
        cout << setw(2) << number.to_ulong() << " = " << number << endl;
    }
    return 0;
}

Объединение (union) представляет собой частный случай структуры, все поля которой располагаются по одному и тому же адресу. Формат описания такой же, как у структуры, только вместо ключевого слова struct используется слово union. Длина объединения равна наибольшей из длин его полей, В каждый момент времени в переменной типа объединение хранится только одно значение, и ответственность за его правильное использование лежит на программисте. Объединения применяют для экономии памяти в тех случаях, когда известно, что больше одного поля одновременно не требуется. Объединение часто используют в качестве поля структуры, при этом в структуру удобно включить дополнительное поле, определяющее, какой именно элемент объединения используется в каждый момент. Имя объединения можно не указывать, что позволяет обращаться к его полям непосредственно.

   union distance

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


10.06.2015; 17:54
хиты: 204
рейтинг:0
Точные науки
информатика
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь