1-1 Программирование С++ / html / modules / 019 / content / content1
.htmlІнформатика — Теорія — Оголошення структури Автори
|
Контакти
|
Підсистема допомоги
|
Методичні вказівки
|
Анотація
|
Назад
ІнформатикаСтруктури : Оголошення структуриЗміст курсу
Вступ
Теорія
Оголошення структури
Масиви структур
Практика
Практичне заняття
Лабораторна робота
Поточна перевірка знань
Використання структур
Висновки
Версія для друку
Оголошення структури Структури дозволяють об'єднувати в єдиному об'єкті сукупність значень, які можуть мати різні типи. Оголошення структури здійснюється за допомогою ключового слова struct. Синтаксис опису структури виглядає так :struct [імя_структури]
{
тип_1 імя_поля_1;
тип_2 імя_поля_2;
...;
тип_n імя_поля_n;
};
де імя_структури - ім'я структури шаблону, що задовольняє правилам завдання ідентифікаторів мови C++;
тип_1, тип_2,..., тип_n - будь-які призначені типи;
імя_поля_1,..., імя_поля_n - ідентифікатори полів, що задовольняють правилам завдання ідентифікаторів.
З метою ознайомлення з цим типом даних розглянемо найпростіший приклад представлення поняття "дата", що складається з декількох частин: число (день, місяць, рік), назва тижня та місяця:struct date
{ int day ; int month ; int year; char day_name[15]; char mon_name[14];} arr[100],*pd,data,new_data; В даному прикладі оголошуються:data, new_data - змінні типу структури date; pd - покажчик на тип data;arr - масив із 100 елементів, кожний елемент якого має тип date.Можливий і наступний опис структури з використанням typedef:typedef struct mystruct
{ int year; char size; float field; } MYSTRUCT;MYSTRUCT s; /* те саме, що й struct mystruct s; */
Потрібно відзначити, що на відміну від описів інших типів даних, опис структури не виділяє місця у пам'яті під елементи структури. Її опис визначає лише так званий шаблон, що описує характеристики змінних, що будуть розміщуватися у конкретній структурі. Щоб ввести змінні та зарезервувати для них пам'ять необхідно або після фігурної дужки, що завершує опис структури, вказати список ідентифікаторів, як це зроблено у вищенаведеному прикладі, або окремо оголосити змінні типу, як ми це робимо у звичайних випадках. Доступ до полів структурних змінних можна забезпечити двома засобами.
1.Використовуючи оператор разіменування:
імя _структурної_змінної. імя_поля.
2.Використовуючи оператор покажчика на структуру:
покажчик_на_структуру-> імя_поля.
Наприклад,struct mystruct
{ int i; char str[21]; double d;} s,*sptr=&s;s.i =3; sptr->d = 1.23; Ініціалізація структури подібна до тієї, що у масивах, але з урахуванням розміщення даних різного типу. struct person
{ char frnm[20]; char nm[30]; int year; char s;};
person poet={"Taras", "Shevtchenko",1814, 'M'},
classics[]={{"Alfred", "Aho", 1939, 'M'},
{"Seimour", "Ginzburg"},
{"Jeffrey", "Ulman", 1938, 'M'}}; У вищенаведеному прикладі ініціалізується змінна poet і масив структур classics. Значення classics[1].year і classics[1].s мають значення відповідно 0 і '\0'. Для змінних одного і того ж самого структурного типу визначена операція присвоювання, при цьому здійснюється поелементне копіювання значень полів.struct date
{ int day ; int month ; int year; char day_name[15]; char mon_name[14];} data,new_data;/* ... */data=new_data;Але, для порівняння структур необхідно перевіряти рівність відповідних полів цих структур окремо. struct point { float x,y; char c;} point1,point2;if ((point1.x==point2.x)&&(point1.y==point2.y)&&(point1.c==point2.c)) { /* … */ }; Кожний опис структури вводить унікальний тип структури, тому в наступному фрагменті програми:struct A
{ int i,j; double d;} a, a1;struct B
{ int i,j; double d;} b;об'єкти a і a1 мають однаковий тип struct A, але об'єкти a і b мають різні типи структури. Структурам можна виконувати присвоювання тільки в тому випадку якщо і вихідна структура, і структура, які присвоюється мають один і той же тип.a = a1; //можна виконати, так як a і a1 мають однаковий тип a = b; // помилка
Приклад 1. Введення і виведення змінної типа структура. #include<iostream.h>struct book { char title[45]; char author[30]; float value;};void main() { book libry; cout<<"Введiть назву книги.\n"; cin>>libry.title; cout<<"Тепер введiть прiзвище автора.\n"; cin>>libry.author; cout<<"Тепер введiть цiну.\n"; cin>>libry.value; cout<<"\n"<<libry.author <<" "<<libry.title<<" "<<libry.value;
}
© 2008 ХНУРЭ, Інформатики, Сінельнікова Т.Ф., informatika@kture.Kharkov.uaРозроблено за допомогою LERSUS