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 108×

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 NEWTON Media prohledá 200  milionů mediálních zpráv během sekund díky Cisco UCS

NEWTON Media prohledá 200 milionů mediálních zpráv během sekund díky Cisco UCS

Česká společnost NEWTON Media provozuje největší archiv mediálních zpráv ve střední a východní Evropě. Mezi její zákazníky patří například ministerstva, evropské instituce nebo komerční firmy z nejrůznějších oborů. NEWTON Media rozesílá svým zákazníkům každý den monitoring médií podle nastavených klíčových slov a nabízí online službu, kde lze vyhledat mediální výstupy v plném znění od roku 1996.

Reklama
Reklama
Obrázek ke článku Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Touto roční dobou, kdy je zem pokrytá barevným listím a prsty křehnou v mrazivých ránech, se obvykle těšíme na zbrusu novou verzi RAD Studia. Letos si však ale budeme muset počkat na Godzillu a Linux až do jara. Vezměme tedy za vděk alespoň updatem 2 a jelikož dle vyjádření pánů z Embarcadero se budou nové věci objevovat průběžně, pojďme se na to tedy podívat.

Obrázek ke článku Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Stále rostoucí zájem o cloudové služby i maximální důraz na pružnost, spolehlivost a bezpečnost IT vedou k výrazným inovacím v datových centrech. V infrastruktuře datových center hraje stále významnější roli software a stále častěji se lze setkat s hybridními přístupy k jejich budování i provozu.

Obrázek ke článku Konference: Mobilní technologie mají velký potenciál pro byznys

Konference: Mobilní technologie mají velký potenciál pro byznys

Firmy by se podle analytiků společnosti Gartner měly  rychle přizpůsobit skutečnosti, že mobilní technologie už zdaleka nejsou horkou novinkou, ale standardní součástí byznysu. I přesto - nebo možná právě proto - tu nabízejí velký potenciál. Kde tedy jsou ty největší příležitosti? I tomu se bude věnovat již čtvrtý ročník úspěšné konference Mobilní řešení pro business.

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ý