Разделы презентаций


С++Пользовательские (структурированные) типы данных

Элементы ЯПВУ Структуры C / С++struct [] { ; · · · · · · · · · · · · · · · · · · ·

Слайды и текст этой презентации

Слайд 1
Элементы ЯПВУ
Пользовательские типы данных
C / С++
В С / С++

есть пять способов создания
пользовательских типов данных:

Структура – совокупности

переменных разных типов, объединённых под одним именем
Объединения – позволяют использовать один и тот же участок памяти для хранения переменных разных типов
Битовое поле – специальный тип элемента структу- ры или объединения для доступа к отдельным битам
Перечисления – набор именованных целых констант

Переименование типов - typedef – ключевое сло- во, которое определяет новое имя для существующего типа данных

И+ПРГ

Элементы ЯПВУ Пользовательские типы данныхC / С++В С / С++ есть пять способов создания пользовательских типов данных:

Слайд 2Элементы ЯПВУ
Структуры
C / С++
struct []
{

;
· · · · · · ·

· · · · · · · · · · · · · · · · · · · · ·
<тип_поля_N> <имя_поля_N>;
} [<переменные_структуры>];

Структура (struct) состоит из фиксированного числа элементов – полей. В отличие от массивов, поля структуры могут быть различного типа. Объявление (деклари-рование) структуры описывает шаблон, по которому строятся переменные структуры (при объявлении структуры память не выделяется, она будет выделена при объявлении переменных этого типа структуры). В С++ структура может быть классом и обладать всеми его свойствами.

Формат объявления переменных структуры:
struct <имя_типа> <список_переменных_структуры> ;

где – имя_типа – идентификатор типа структуры (ттетег структуры) ,
– struct – ключевое слово описания структуры,
– тип_поля_N имя_поля_N – список описаний N полей, разделен-ных точкой с запятой – char fio[60]; Поля структуры могут быть любого типа, кроме типа этой же структуры, но могут быть указателями на него.
– переменные_структуры – список переменных или указателей.

Могут быть опущены или тег структуры, или её переменные, но не оба одновременно.

C / С++

И+ПРГ

Элементы ЯПВУ Структуры C / С++struct   [] { ;  · · · · ·

Слайд 3C / С++
Элементы ЯПВУ
Структуры
Примеры объявления структур
Вариант 1 –

объявление структуры с
одновременным объявлением пере-менных:
struct addr
{ char name[40];

char street[40];
char city[20];
char state[3];
unsigned long int zip, date;
} addr_info, binfo, dinfo;

Вариант 2 – объявление структуры без объявления переменных, а затем объявление переменных отдельно:

struct addr
{ char name[40];
char street[40];
char city[20];
char state[3];
unsigned long int zip, date;
};
struct addr addr_info, dibfo;

Вариант 3 – объявление структуры с
одновременным объявлением только одной переменной (тег опускается):

struct
{ char name[40];
char street[40];
char city[20];
char state[3];
unsigned long int zip, date;
} addr_info;

struct
{ char name[40];
char street[40];
char city[20];
char state[3];
unsigned long int zip, date;
} addr_inf[100], *ps;

Вариант 4 – объявление массива структур и указателя на структуру:

C / С++

И+ПРГ

C / С++Элементы ЯПВУ Структуры Примеры объявления структурВариант 1 – объявление структуры с одновременным объявлением пере-менных:struct addr

Слайд 4C / С++
Элементы ЯПВУ
Структуры
Инициализация структуры

struct
{ char fio[40];

int date, zip;
double salary;
} worker={"КалмыковВ.", 31, 249030, 6.400,00};
Для

инициализации структуры значения её элементов (полей) перечисляют при объявлении переменной в фигурных скобках в порядке их описания.

struct complex
{ float real, im;
} compl [2][3]= {
{{1,1}, {1,1}, {1,1}},
{{2,2}, {2,2}, {2,2}}
};

При инициализации массивов структур надо заключать в фигурные скобки каждый элемент массива, т.к. многомерный массив – это массив массивов.

// строка 1, т.е. массив compl[0]
// строка 2, т.е. массив compl[1]

Доступ к полям структуры

Доступ к элементам структуры осуществляется через операторы:
. (точка) - имя_структуры.имя_поля - доступ через имя структуры. Пример: addr.sity = "Омск";

-> (стрелка) - имя_указателя->имя_поля - доступ через указатель. Пример: ps->street = "Онежская";

C / С++

C / С++

И+ПРГ


Слайд 5C / С++
Элементы ЯПВУ
Структуры
Присваивание структур
При выполнении операции присваивания для

переменных одинакового структурного типа происходит поэлементное копирование, нет необходимости присваивать

значения каждого элемента в отдельности.


Пример:

#include
int main(void)
{
struct
{ int a;
int b;
} x, y;
x.a = 10;
y = x; // присваивание одной структуры другой
printf ("%d", y.a);
return 0;
}

После присвоения в y.a хранится значение 10.

Массивы структур

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

Вначале объявляют структура, а затем объявляют массив этого же типа.
struct addr addr_list[100]; - создает 100 наборов переменных, каждый организован по структуре addr.
Для получения доступа к определенной структуре указывается имя массива с индексом:
printf ("%1u"', addr_list[2].zip);
Индексирование массива начинается с 0.
Пример: в результате выполнения выражения addr_list[2].name[0] = 'X'; первому символу поля name, находящегося в третьей структуре из addr_list, присваивается значение 'X'.

Указатели на структуры

srtuct addr *addr_pointer;
Они используются обычно в двух случаях: когда структура передается функции с помощью вызова по ссылке, и когда создаются связанные списки и др. структуры с динамическими данными.

C / С++

И+ПРГ

C / С++Элементы ЯПВУ СтруктурыПрисваивание структурПри выполнении операции присваивания для переменных одинакового структурного типа происходит поэлементное копирование,

Слайд 6C / С++
Элементы ЯПВУ
Объединения
Объединения (union) – это частный случай

структуры, все поля которой расположены по одному адресу. Размер объединения

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

union [<имя_типа>]
{ <тип_поля_1> <имя_поля_1>;
· · · · · · · · · · · · · · · · · · · · · · · · ·· · · ·
<тип_поля_N> <имя_поля_N>;
} [<переменные_объединения>];

Формат объявления переменных объединения:
union <имя_типа> <список_переменных_объединения>;

где – имя_типа – идентификатор типа объединения (ттетег) ,
– union – ключевое слово описания объединения,
– тип_поля_N имя_поля_N – список описаний N полей, разделен-ных точкой с запятой – int dh;.

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

C / С++

И+ПРГ

C / С++Элементы ЯПВУ ОбъединенияОбъединения (union) – это частный случай структуры, все поля которой расположены по одному

Слайд 7C / С++
Элементы ЯПВУ
Битовые поля
Битовые поля – это особый

вид полей структуры. Они позволяют получить доступ к единичному биту

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


Формат описания битового поля:
<имя_типа> <имя_поля> : <длина_поля>
где – имя_типа – идентификатор типа битового поля,
– имя_поля – идентификатор битового поля,
– длина_поля – количество бит, занимаемое полем (целая положительная константа).

Тип битового
поля может быть:
int,
signed,
unsigned,
bool (в С++).

Пример: байт состояния адаптера модема
struct status_type
{ unsigned delta_cts : 1;
unsigned delta_dsr : 1;
unsigned tr_edge : 1;
unsigned delta_rec : 1;
unsigned cts : 1;
unsigned dsr : 1;
unsigned ring :1;
unsigned rec_line :1;
} status;

Присвоение значения битовому полю:
status.ring = 0;

Если нужны не все поля – ненужные до нужных объявляются как одно поле, но не именуются, а после - опускаются.
struct status_type
{ unsigned : 4;
unsigned cts : 1;
unsigned dsr : 1;
} status;

Ограничения: нельзя получить адрес битового поля; нет массивов битовых данных; и др.

C / С++

И+ПРГ

C / С++Элементы 	ЯПВУ Битовые поляБитовые поля – это особый вид полей структуры. Они позволяют получить доступ

Слайд 8C / С++
Элементы ЯПВУ
Перечисления
Перечисления (enum) – это набор именованных

констант.
enum []
{ } [];
где – имя_типа

– идентификатор типа объединения (ттетег) ,
– enum – ключевое слово описания перечисления,
– список_констант – список целочисленных констант. При отсутствии инициализатора значение первой константы = 0, остальных +1.

Формат объявления переменных:
enum <имя_типа> <переменные_перечисления>;

Примеры: enum coin {penni, nickel, dime, quarter, half_dollar, dollar};
enum coin money; а значить можно выполнить:
money = dime; if (money == quarter) printf("Денег – четверть доллара");
Оператор printf ("%d %D", penny, dime); выведет на экран 0 и 2.
Инициализация: enum coin {penny=2, nickel, dime, quarter=100, half_dollar, dollar};

Значения элементов будут:
penny 2
nickel 3
dime 4
quarter 100
half_dollar 101
dollar 102

Имена перечисляемых констант должны быть уникальными, а значения могут совпадать.

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

C / С++

И+ПРГ

C / С++Элементы ЯПВУ ПеречисленияПеречисления (enum) – это набор именованных констант. enum   [] { }

Слайд 9C / С++
Элементы ЯПВУ.
Переименование типов

Переименование типов (typedef) – задание

типу данных нового имени. Новый тип при этом не создается,

а определяется новое имя (синоним) для уже существующего типа.

typedef <тип> <новое_имя_типа> [<размерность>]

где – тип – любой тип данных языка С,
– новое_имя_типа – новое имя для этого типа,
– typedef – ключевое слово переименования типа,
– размерность – размерность нового типа данных.



Пример:
typedef char SIMB[40]; //SIMB - массив из сорока символов   SIMB person; //переменная person - тоже массив из сорока символов Это эквивалентно объявлению -  char person[40];.

typedef используется для:
Задания типам с длинными описаниями (именами) коротких псевдонимов.
для облегчения переносимости программ – если машинно-зависимые типы данных объявить через typedef, то при переносе программы надо изменить только эти операторы.

C / С++

И+ПРГ

C / С++Элементы ЯПВУ. Переименование типовПереименование типов (typedef) – задание типу данных нового имени. Новый тип при

Слайд 10Элементы ЯПВУ
Пользовательские типы данных
C / С++
Практические занятия
Найти ошибки
Пример 3



#include
#include
void main()
{ clrscr();
struct growth {char

*name;
int value;};
growth man;
man->value = 45;
man->name = "Anton";
cout<name<< " - "
<value;
}

Пример 4

#include
#include
void main()
{ clrscr();
struct book {char title[10]; char auther[10]; }; struct book *lib;
gets (book.title);
gets (book.auther);
cout <}

Неправильное объявление элемента структуры.

Неправильное объявление элемента структуры.

C / С++

И+ПРГ

Элементы ЯПВУ Пользовательские типы данныхC / С++Практические занятияНайти ошибкиПример 3 #include #include void main(){  clrscr();

Слайд 11Элементы ЯПВУ
Пользовательские типы данных
C / С++
Практические занятия
Объяснить тексты программ
Пример

1

#include
#include
void main()
{ clrscr();
struct man

{int value; char name;};
man my;
my.value = 45;
my.name = 'Anton';
cout<}

Пример 2

#include
#include
void main()
{ clrscr();
struct my_struct {int a; char b[10];};
struct new_struct
{ int b;
my_struct c;
};
new_struct f[2];
f[1].c.b[5] = 'g';
}

C / С++

И+ПРГ

Элементы ЯПВУ Пользовательские типы данныхC / С++Практические занятияОбъяснить тексты программПример 1 #include #include void main(){  clrscr();

Слайд 12Элементы ЯПВУ
Пользовательские типы данных
C / С++
Практические занятия
Найти и объяснить

ошибки
Пример 5

#include
#include
void main()
{ clrscr();
struct

my
{ int s;
struct {char b};};
struct example(int g;);
};
}

Пример 6

#include
#include
void main()
{ clrscr();
struct example
{ int b=2;
char c='a';
};
}

Попытка инициализировать поля структуры в декларации.

Попытка вложенного объявления структур.

C / С++

И+ПРГ

Элементы ЯПВУ Пользовательские типы данныхC / С++Практические занятияНайти и объяснить ошибкиПример 5 #include #include void main(){

Слайд 13Элементы ЯПВУ.
Пользовательские типы данных
C / С++
Практические занятия
Найти, объяснить, исправить

ошибку
Пример 7

#include
#include
void main()
{ clrscr();
struct

name
{ char a[5];
int b;
char c[10]; };
name my = { 'a', 1, "123456"};
}

Пример 7'

#include
#include
void main()
{ clrscr();
struct name
{ char a[5];
int b;
char c[10]; };
name my = {{'a'}, 1, "123456"};
}

Компилятор ожидает 5 значений для инициализации первого поля – символьного массива. При попытке использовать последующие значения возникает проблема соответствия типов.

А в этом примере фигурные скобки {'a'} указывают, что для массива есть только один инициализатор, а остальные выражения предназначены для инициализации прочих полей структуры.

C / С++

И+ПРГ

Элементы ЯПВУ. Пользовательские типы данныхC / С++Практические занятияНайти, объяснить, исправить ошибкуПример 7 #include #include void main(){

Обратная связь

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

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика