C++ – struktury
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

C++ – strukturyC++ – struktury

 

C++ – struktury

Google       Google       22. 6. 2008       31 888×

Dneska si urobíme úvod do štruktúr, posledné kapitoly boli skôr teoretického charakteru. Ani tento diel nebude výnimkou.

Reklama
Reklama

Úvod do štruktúr

Už ste zistili, že nie všetky potrebné veci v poliach nespravíte efektívne. A preto existujú štruktúry. Je to vlastne množina premenných, ktoré nemajú rovnaký typ. To znamená, že môžeme mať niekoľko typov, napr. ako informácie o zamestnancovi, ktorý má istý počet rokov, dostáva istý plat, má meno, zameranie a podobne. Už z toho vidíme, že táto štruktúra má zložky typu int – vek, float – plat, char[] – reťazec a podobne. Štruktúra predstavuje univerzálnu dátovú formu, umožňuje zjednotiť dátovú reprezentáciu uložením všetkých údajov o zamestnancovi do jednej štruktúry. A keď budete chcieť mať informácie o všetkých zamestnancov, urobíte si pole štruktúr. Štruktúra je aj základ objektov v C++.

Štruktúra je užívateľsky definovaný typom, ktorého vlastnosti popisuje deklarácia štruktúry. Po definovaní môžeme vytvárať jeho premenné. Proces vytvorenia štruktúry sa skladá z dvoch častí. Najprv popíšeme štruktúru ako čo tam budeme chcieť ukladať a v akom rozsahu. Potom vytvoríme premenné štruktúry alebo dátové objekty odpovedajúce danému popisu. Tak, popis sme si už o zamestnancovi spravili, teraz prichádza na rad napísanie tejto štruktúry, ktorá bude vyzerať napr takto:

struct  zamestnanec {        //popis struktury
        int vek;            //clen typu int - vek  
        float plat;         //clen typu float - plat
        char meno[20];      //clen typu pola char - meno
        };

Kľúčové slovo struct určuje popis štruktúry. Identifikátor zamestnanec určuje názov štruktúry a druhý význam má ako nový typ premennej, ktorá má v sebe vložené ďalšie premenné. Teraz môžete s premennou zamestnanec vytvárať ďalšie štruktúry takejto stavby. Medzi vloženými zátvorkami sa nachádza zoznam premenných v štruktúre. Tu môže byť ľubovoľný typ premennej vrátanie polí a iných štruktúr. Aby sme vedeli, naša štruktúra má 3 členy, s ktorými môžeme ľubovoľne pracovať. Teraz, keď máme deklaráciu, môžeme vytvárať ďalšie premenné odpovedajúceho typu:

zamestnanec uctovnik;       //uctovnik je strukturna premenna typu zamestnanec
zamestnanec upratovacka;    //premenna typu zamestnanec
zamestnanec manazer;        //premenna typu zamestnanec 

V jazyku C++ je značka štruktúry používaná ako meno základného typu. Táto zmena zdôrazňuje, že deklarácia štruktúry definuje nový typ.

Ak je premenná typu zamestnanec, zaisťuje prístup k jednotlivým členom operator „.“ (bodka), napr. uctovnik.vek odkazuje na premennú vek v štruktúre uctovnik a uctovnik.plat ukazuje na premennú plat. Obecne povedané , že mená premenných sa používajú ako indexy v poliach. Ak je člen vek typu int, tak aj premenná uctovnik.vek typu int. Teraz si ukážeme názorný príklad:

//struktura1.cc  -- ukazka pouzitia struktury
#include <iostream>

using namespace std;

struct zamestnanec {    //sablona struktury
       int vek;
       float plat;
       char meno[20];
};

int main() {
    zamestnanec uctovnik = 
    {
               22,              //hodnota vek
               17000,           //hodnota plat
               "Martin Bodocky"   //hodnota meno
    }; // uctovnik je strukturny typ zamestnanec
       // inicializuje z uvedenymi hodnotami
    zamestnanec upratovacka = 
    {
               24,
               14000,
               "Majak Gurunu"
    };
    
    cout << "Prijali sme do prace novych zamestnancov : "<< uctovnik.meno;
    cout << " a "<< upratovacka.meno << "\n";
    cout << "Ich priemerny vek je "<<(uctovnik.vek+upratovacka.vek)/2 <<"\n";
    return 0;
}

Výstup:

Prijali sme do prace novych zamestnancov : Martin Bodocky a Majak Gurunu
Ich priemerny vek je 22

Dôležitá vec je, kde sme deklarovali štruktúru, či vo funkcii main() alebo pred ňou. Rozdiel je v použití. Keď je štruktúra vo funkcii main(), je to vnútorná deklarácia, čiže by sme ju mohli používať iba vo funkcii. Ale ak budeme deklarovať pred funkciou, je to vonkajšia (globálna) deklarácia. V našom program to nemá váhu, ale ak by sme mali program s viacerými funkciami, mohlo by nám so popliesť. Lebo vonkajšie funkcie môžu používať všetky funkcie, vnútorné iba funkcia, v ktorej sú deklarované. Odporúča sa používať skôr vonkajšie deklarácie, šetrí sa čas aj námaha. Ale pozor, nie je to pravidlo. Ďalej si všimnite deklarácie:

zamestnanec uctovnik = 
    {
               22,              //hodnota vek
               17000,           //hodnota plat
               "Martin Bodocky" //hodnota meno
    };

Je rovnaká ako u polí, ale s tým rozdielom, že tu už sme si sami zvolili typ premenných, ktorú môžeme prepísať aj takto:

zamestnanec uctovnik = {22, 17000, "Martin Bodocky"};

Každý člen je spracovávaný ako samostatná premenná dátového typu. Ak programátor vypíše pomocou objektu cout premennú uctovnik.vek, je typom int, preto sa vypíše ako číslo, to isté ako premenná uctovnik.meno je typu char, tak to vypíše ako reťazec.

Ďalšie vlastnosti štruktúr

Jazyk C++ sa snaží vytvárať definované typy tak, aby sa podobali čo najviac vstavaným typom. Čiže štruktúru môžete predávať ako parameter funkcii a podobne. Dokonca môže priradiť jednu štruktúru druhej rovnakého typu. Jednoducho ich nastavíme, aby tie štruktúry podobali svojimi časťami. To sa nazýva členské priradenie. Ďalšie využitie štruktúr si ukážeme neskôr v ďalších dieloch. Ale urobíme si aspoň názorný príklad:

//strukruta2.cc -- clenske priradenie
#include <iostream>

using namespace std;

struct zamestnanec {
       char meno[20];
       int vek;
       float plat;
       };
int main() {
    
    zamestnanec jozko = {
                "Mrkvicka",
                44,
                18001f
                };
    zamestnanec dezko;
    cout << "Meno :" << jozko.meno<< " vek ";
    cout << jozko.vek<< "rokov a plat " << jozko.plat<< "\n";
    dezko=jozko;        //clenske priradenie
    cout << "Meno :" << dezko.meno<< " vek ";
    cout << dezko.vek<< "rokov a plat " << dezko.plat<< "\n";
    return 0;
}

Výstup:

Meno: Mrkvicka vek 44rokov a plat 18001
Meno: Mrkvicka vek 44rokov a plat 18001

Vidíte sami, že členské priradenie funguje. Ale premenné typu štruktúry môžeme vytvoriť pomocou jednej deklarácie. Stačí ak keď na konci deklarácie pred bodkočiarkou napíšeme názvy ďalších premenných. Napr.:

struct zamestnanec {
       char meno[20];
       int vek;
       float plat;
       }jozko,dezko;

A týmto spôsobom ich môžeme aj hneď inicializovať:

struct zamestnanec {
       char meno[20];
       int vek;
       float plat;
       }jozko = {
             "Mrkvicka",
             44,
             18001
       };

Ale tento príklad sa pomenej používa, kvôli čitateľnosti kódu. A štruktúra sa dá vytvoriť aj bez názvu:

struct {
       char meno[20];
       int vek;
       float plat;
       }jozko,dezko;

Čiže sme vytvorili dve premenné tejto štruktúry, ale nemôžeme takúto štruktúru vytvoriť, lebo nemá názov.

Pole štruktúr

Ako exituje pole znakov, tak existuje aj pole štruktúr s rovnakými pravidlami ako pri obyčajných poliach. Napríklad pole štruktúr pre 100 zamestnancov:

struct zamestnanec[100] {  //pole o 100 strukturach typu zamestnanec
       char meno[20];
       int vek;
       float plat;
       };

Tak to pole vzniklo a každý jeho index je samostatná štruktúra. Takto sa s nimi dá pracovať:

cin >> zamestnanec[0].meno;   //pouziva clen meno prvej struktury
cout << zamestnanec[99].meno;   //zobrazi meno posledneho zamestnanca

Pri inicializácii poľa štruktúr spájame pravidlo inicializácie polí s pravidlom o štruktúrach. Pretože každý prvok poľa je štruktúra a jeho hodnota je reprezentovaná inicializáciou štruktúry. Napr.:

zamestnanec firma[2] = {        //inicializacia pola
           {"jozko", 44, 17000},               //prva struktura v poli
           {"dezko", 55, 22000}                //druha struktura v poli
           };

Zápis si môžete určiť podľa vlastného uváženia.

Záver

Dneska sme si prebrali štruktúry a na ďalší diel si pripravíme menšiu písomku aj s testom. Kvôli tomu som vám nezadával žiadne úlohy. Veľa šťastia…

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
Autor rád robi vsetko co ho napadne vramci IT.

Nové články

Reklama
Reklama
Obrázek ke článku Nový IT hráč na českém trhu

Nový IT hráč na českém trhu

V roce 2015 otevřela v Praze na Pankráci v budově City Tower své kanceláře společnost EPAM Systems (NYSE:EPAM), jejíž centrála se nachází v USA. Společnost byla založená v roce 1993 a od té doby prošla velkým vývojem a stále roste.

Obrázek ke článku České Radiokomunikace opět hledají nejlepší nápady pro internet věcí

České Radiokomunikace opět hledají nejlepší nápady pro internet věcí

České Radiokomunikace (CRA) pořádají druhý ročník CRA IoT Hackathonů. Zájemci z řad vývojářů a fanoušků moderních technologií mohou změřit své síly a během jediného dne sestrojit co nejzajímavější funkční prototyp zařízení, které bude komunikovat prostřednictvím sítě LoRa. CRA IoT Hackathony se letos uskuteční ve dvou fázích, na jaře a na podzim, v různých městech České republiky. Jarní běh se odstartuje 31. března v Brně a 7. dubna v Praze.

Obrázek ke článku Cloud computing je využíván stále intenzivněji

Cloud computing je využíván stále intenzivněji

Využívání cloud computingu nabývá na intenzitě. Jen v letošním roce vzroste podle analytiků trh se službami veřejného cloudu o 18 %, přičemž o téměř 37 % vzrostou služby typu IaaS. Růst o více než pětinu pak čeká služby poskytování softwaru formou služby, tedy SaaS. Aktuálním trendům v oblasti využívání cloudu se bude věnovat konference Cloud computing v praxi, která se koná 23. března. 2017 v pražském Kongresovém centru Vavruška na Karlově náměstí 5.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032017 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý