Ця стаття потребує додаткових для поліпшення її . (May 2016) |
В інформатиці складений тип даних — це будь-який тип даних, який можна сконструювати в програмі за допомогою примітивних типів даних мови програмування та інших складених типів. Іноді його називають структурним або агрегатним типом даних, хоча останній термін може також стосуватися масивів, списків тощо. Акт побудови складеного типу відомий як композиція. Складені типи даних часто протиставляються скалярним змінним.
C/C++ структури та класи
struct
— це поняття C і про складений тип, тип даних, який складається з фіксованого набору позначених полів або членів. Це називається так через ключове слово struct
, яке використовується під час їх оголошень, що є скороченням від структури або, точніше, визначеної користувачем структури даних.
У C++ єдиною відмінністю між struct
та класом є рівень доступу за замовчуванням, який є приватним для класів і публічним для struct
.
Зауважте, що хоча класи та ключове слово class
були абсолютно новими в C++, мова програмування C вже мала необроблений тип struct
. Для всіх намірів і цілей структури C++ утворюють надмножину структур C: практично всі дійсні struct
C є дійсними struct
C++ з однаковою семантикою.
Оголошення
Оголошення struct
складається зі списку полів, кожне з яких може мати будь-який тип. Загальна пам'ять, необхідна для об'єкта struct
, є сумою вимог до пам'яті для всіх полів плюс будь-яке внутрішнє доповнення.
Наприклад:
struct Account { int account_number; char *first_name; char *last_name; float balance; };
визначає тип, який називається struct Account
. Щоб створити нову змінну цього типу, ми можемо написати struct Account myAccount;
який має цілочисельний компонент, до якого myAccount.account_number
, і компонент з рухомою комою, до якого отримує доступ myAccount.balance
, а також компоненти first_name
і last_name
. Структура myAccount
містить усі чотири значення, і всі чотири поля можна змінювати незалежно.
Оскільки багаторазове написання struct Account
у коді стає громіздким, нерідко можна побачити оператор typedef
у коді C, щоб забезпечити більш зручний синонім для struct
. Проте деякі інструкції зі стилю програмування не рекомендують цього, стверджуючи, що це може заплутати тип.
Наприклад:
typedef struct Account_ { int account_number; char *first_name; char *last_name; float balance; } Account;
У коді C++ typedef
не потрібен, оскільки типи, визначені за допомогою struct
, уже є частиною звичайного простору імен, тому тип можна називати або struct Account
або просто Account
. Як інший приклад, тривимірний векторний складений тип, який використовує тип даних з рухомою комою, можна створити за допомогою:
struct Vector { float x; float y; float z; };
Змінна з іменемvelocity
зі складеним типом Vector
буде оголошена як Vector velocity;
Доступ до членів velocity
можна отримати за допомогою крапкової нотації. Наприклад, velocity.x = 5;
встановить компонент x
velocity
рівним 5. Подібно колірна структура може бути створена за допомогою:
struct Color { unsigned int red; unsigned int green; unsigned int blue; };
У 3D-графіці зазвичай потрібно стежити за положенням і кольором кожної вершини. Одним із способів зробити це було б створити складений тип Vertex
, використовуючи раніше створені складені типи Vector
і Color
:
struct Vertex { Vector position; Color color; };
Інстанціювання
Створіть змінну типу struct Vertex
, використовуючи той самий формат, що й раніше: Vertex v;
Членський доступ
Присвойте значення компонентам v
так:
v.position.x = 0.0; v.position.y = 1.5; v.position.z = 0.0; v.color.red = 128; v.color.green = 0; v.color.blue = 255;
Примітивний підтип
Основне використання struct
— це створення складних типів даних, але іноді його використовують для створення примітивних структурних підтипів. Наприклад, починаючи зі стандарту ANSI C мова вимагає, щоб, якщо дві структури мають однакові початкові поля, ці поля були представлені однаково. Код:
struct ifoo_old_stub { long x, y; }; struct ifoo_version_42 { long x, y, z; char *name; long a, b, c; }; void operate_on_ifoo(struct ifoo_old_stub *); struct ifoo_version_42 s; . . . operate_on_ifoo(&s);
буде працювати правильно.
Тип підпису
Сигнатури типів (або функційні типи) створюються з примітивних і складених типів, і можуть самі служити типами під час створення складених типів:
typedef struct { int x; int y; } Point; typedef double (*Metric) (Point p1, Point p2); typedef struct { Point centre; double radius; Metric metric; } Circle;
Примітки
- Howe, Denis. The Free On-line Dictionary of Computing. Dictionary.com (англ.). Процитовано 1 лютого 2016.
Див. також
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Cya stattya potrebuye dodatkovih posilan na dzherela dlya polipshennya yiyi perevirnosti Bud laska dopomozhit udoskonaliti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Zvernitsya na storinku obgovorennya za poyasnennyami ta dopomozhit vipraviti nedoliki Material bez dzherel mozhe buti piddano sumnivu ta vilucheno May 2016 V informatici skladenij tip danih ce bud yakij tip danih yakij mozhna skonstruyuvati v programi za dopomogoyu primitivnih tipiv danih movi programuvannya ta inshih skladenih tipiv Inodi jogo nazivayut strukturnim abo agregatnim tipom danih hocha ostannij termin mozhe takozh stosuvatisya masiviv spiskiv tosho Akt pobudovi skladenogo tipu vidomij yak kompoziciya Skladeni tipi danih chasto protistavlyayutsya skalyarnim zminnim C C strukturi ta klasistruct ce ponyattya C i C pro skladenij tip tip danih yakij skladayetsya z fiksovanogo naboru poznachenih poliv abo chleniv Ce nazivayetsya tak cherez klyuchove slovo struct yake vikoristovuyetsya pid chas yih ogoloshen sho ye skorochennyam vid strukturi abo tochnishe viznachenoyi koristuvachem strukturi danih U C yedinoyu vidminnistyu mizh struct ta klasom ye riven dostupu za zamovchuvannyam yakij ye privatnim dlya klasiv i publichnim dlya struct Zauvazhte sho hocha klasi ta klyuchove slovo class buli absolyutno novimi v C mova programuvannya C vzhe mala neobroblenij tip struct Dlya vsih namiriv i cilej strukturi C utvoryuyut nadmnozhinu struktur C praktichno vsi dijsni struct C ye dijsnimi struct C z odnakovoyu semantikoyu Ogoloshennya Ogoloshennya struct skladayetsya zi spisku poliv kozhne z yakih mozhe mati bud yakij tip Zagalna pam yat neobhidna dlya ob yekta struct ye sumoyu vimog do pam yati dlya vsih poliv plyus bud yake vnutrishnye dopovnennya Napriklad struct Account int account number char first name char last name float balance viznachaye tip yakij nazivayetsya struct Account Shob stvoriti novu zminnu cogo tipu mi mozhemo napisati struct Account myAccount yakij maye cilochiselnij komponent do yakogo myAccount account number i komponent z ruhomoyu komoyu do yakogo otrimuye dostup myAccount balance a takozh komponenti first name i last name Struktura myAccount mistit usi chotiri znachennya i vsi chotiri polya mozhna zminyuvati nezalezhno Oskilki bagatorazove napisannya struct Account u kodi staye gromizdkim neridko mozhna pobachiti operator typedef u kodi C shob zabezpechiti bilsh zruchnij sinonim dlya struct Prote deyaki instrukciyi zi stilyu programuvannya ne rekomenduyut cogo stverdzhuyuchi sho ce mozhe zaplutati tip Napriklad typedef struct Account int account number char first name char last name float balance Account U kodi C typedef ne potriben oskilki tipi viznacheni za dopomogoyu struct uzhe ye chastinoyu zvichajnogo prostoru imen tomu tip mozhna nazivati abo struct Account abo prosto Account Yak inshij priklad trivimirnij vektornij skladenij tip yakij vikoristovuye tip danih z ruhomoyu komoyu mozhna stvoriti za dopomogoyu struct Vector float x float y float z Zminna z imenemvelocity zi skladenim tipom Vector bude ogoloshena yak Vector velocity Dostup do chleniv velocity mozhna otrimati za dopomogoyu krapkovoyi notaciyi Napriklad velocity x 5 vstanovit komponent x velocity rivnim 5 Podibno kolirna struktura mozhe buti stvorena za dopomogoyu struct Color unsigned int red unsigned int green unsigned int blue U 3D grafici zazvichaj potribno stezhiti za polozhennyam i kolorom kozhnoyi vershini Odnim iz sposobiv zrobiti ce bulo b stvoriti skladenij tip Vertex vikoristovuyuchi ranishe stvoreni skladeni tipi Vector i Color struct Vertex Vector position Color color Instanciyuvannya Stvorit zminnu tipu struct Vertex vikoristovuyuchi toj samij format sho j ranishe Vertex v Chlenskij dostup Prisvojte znachennya komponentam v tak v position x 0 0 v position y 1 5 v position z 0 0 v color red 128 v color green 0 v color blue 255 Primitivnij pidtip Osnovne vikoristannya struct ce stvorennya skladnih tipiv danih ale inodi jogo vikoristovuyut dlya stvorennya primitivnih strukturnih pidtipiv Napriklad pochinayuchi zi standartu ANSI C mova vimagaye shob yaksho dvi strukturi mayut odnakovi pochatkovi polya ci polya buli predstavleni odnakovo Kod struct ifoo old stub long x y struct ifoo version 42 long x y z char name long a b c void operate on ifoo struct ifoo old stub struct ifoo version 42 s operate on ifoo amp s bude pracyuvati pravilno Tip pidpisuSignaturi tipiv abo funkcijni tipi stvoryuyutsya z primitivnih i skladenih tipiv i mozhut sami sluzhiti tipami pid chas stvorennya skladenih tipiv typedef struct int x int y Point typedef double Metric Point p1 Point p2 typedef struct Point centre double radius Metric metric Circle PrimitkiHowe Denis The Free On line Dictionary of Computing Dictionary com angl Procitovano 1 lyutogo 2016 Div takozhKompoziciya programuvannya Skalyar