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

C++ – strukturyC++ – struktury

 

C++ – struktury

Google       Google       22. 6. 2008       30 473×

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

Obrázek ke článku Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres HCPP16 pořádá od 30. září do 2. října nezisková organizace Paralelní Polis již potřetí, a to ve stejnojmenném bitcoinovém prostoru v pražských Holešovicích. Letos přiveze na třídenní konferenci přes 40 většinou zahraničních speakerů – lídrů z oblastí technologií, decentralizované ekonomiky, politických umění a aktivismu. Náměty jejich přednášek budou také hacking, kryptoměny, věda, svoboda nebo kryptoanarchie.

Reklama
Reklama
Obrázek ke článku ICT PRO školení zaměřené nejenom na ICT

ICT PRO školení zaměřené nejenom na ICT

Dovolte, abychom se představili. Jsme zaměstnanci společnosti ICT Pro, profesionálové v oblasti poskytování komplexních ICT služeb. Neboli služeb spojených s informačními a komunikačními technologiemi, které dnes - ve 21. století - tvoří  nedílnou součást běžného provozu všech moderních firem.

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 © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý