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

C++ – strukturyC++ – struktury

 

C++ – struktury

Google       Google       22. 6. 2008       41 738×

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

Ú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 Hybridní inteligentní systémy 2

Hybridní inteligentní systémy 2

V technické praxi využíváme často kombinaci různých disciplín umělé inteligence a klasických výpočtů. Takovým systémům říkáme hybridní systémy. V tomto článku se zmíním o určitém typu hybridního systému, který je užitečný ve velmi složitých výrobních procesech.

Obrázek ke článku Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Vedení týmu v oboru informačních technologií se nijak zvlášť neliší od jiných oborů. Přesto však IT manažeři čelí výzvě v podobě velmi rychlého rozvoje a tím i rostoucími nároky na své lidi. Udržet pozornost, motivaci a efektivitu týmu vyžaduje opravdu pevné manažerské základy a zároveň otevřenost a flexibilitu pro stále nové výzvy.

Obrázek ke článku Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Za poslední rok se podoba práce zaměstnanců změnila k nepoznání. Především plošné zavedení home office, které mělo být zpočátku jen dočasným opatřením, je pro mnohé už více než rok každodenní realitou. Co ale dělat, když se při práci z domova ztrácí motivace, zaměstnanci přestávají komunikovat a dříve fungující tým se rozpadá na skupinu solitérů? Odborníci na personalistiku dali dohromady několik rad, jak udržet tým v chodu, i když pracovní podmínky nejsou ideální.

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý