C++ - 5. lekce
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

C++ - 5. lekceC++ - 5. lekce

 

C++ - 5. lekce

Google       Google       13. 4. 2005       86 131×

  • struktury – deklarace, inicializace, volání
  • pole struktur
  • bitová pole
  • uniony
  • úkol č. 5

Reklama
Reklama

Struktury

Úvod do struktur

Předpokládejme, že chcete (a nekecejte, že ne) uložit jméno, věk a BMI index několika osob. Pole, leč může obsahovat několik položek, to neudělá, protože musí být stejného typu. Odpovědí je struktura v C++. Chcete-li si udělat přehled o všech zaměstnancích, vytvoříte pole struktur. Struktura je jistým prostředkem vedoucím do lahůdky C++ v OOP, třídy. Díky strukturám se přiblížíte OOP (Objektově orientovanému programování), srdci C++.

Struktury tvoříme nejčastěji vně f-ce main. Nazývá se externí deklarací struktury. Proč? Externí deklarace se může použít u všech f-cí, které ji následují, kdežto interní deklarace (např. hned za složenou závorkou za int main) se může použít pouze ve f-ci, ve které se nachází.

Deklarace struktury:


struct nazev_promenne
{
   char jmeno[10];
   int vek;
   double bmi;
};

Inicializace struktury

(za nazev_promenne jsme si zvolili lide):


lide ales =
{
   "Ales",    //jmeno
   22,         // vek
   11.49     // bmi index
};

Volání některé proměnné ze struktury

Chceme-li vyvolat věk alese, napíšeme:


cout << ales.vek;

To vypíše 22, tedy věk Aleše.

. je operátor příslušnosti. (ales.vek – proměnná vek ve struktuře ales)

Vytvořit struktur si můžeme, kolik chceme, klidně celý počet zaměstnanců. Tedy např.:


lide petr =
{ ... }

…atp

Nebo si můžeme vytvořit prázdné struktury:


lide martin, honza, alena;

Vytvořili jsme tři struktury, každá má svoje proměnné stejně jako ales, ale nemají žádné hodnoty. K čemu by nám ale byly struktury, které mají pevně stanovené hodnoty. Pokud chceme například zapsat vek do struktury alena, napíšeme:


alena.vek = 17;

Je to snadné, stejně jako proměnné, jen tu je navíc tečka, která nám ukazuje, kam daná proměnná patří.

Vytvořit struktury můžeme už při její deklaraci:


struct lide
{
   int vek;
} milan;

Je to stejné jako:


struct lide
{
   int vek;
};
lide milan;

Kdo přesně stále nechápe struktury, malé vysvětlení:


struct osoba
{ 
char jmeno[20];
int vek[20];
char prace[20];
} zamestnanec;

Proč nefunguje např. cout << osoba.jmeno;, ale cout << zamestnanec.jmeno;? Co značí „osoba“ a co „zamestnanec“?

Protože:


struct osoba
{ 
char jmeno[20];
int vek[20];
char prace[20];
};

…je jen DEFINICE, nemá žádné hodnoty.

Vysvětlím to jinak:

Jsou to šuplíky, koupil sis nábytek se třemi šuplíky a teď do nich chceš dát mrkev, hrách a petržel a nazveš to ZELENINA. Takže pokud chceš hrách, dáš zelenina.hrach

A zase: můžeš do nich dát i rýži, fazole a čočku a nazveš to LUSTENINY. Přístup bude: lusteniny.fazole

Ale všechno můžeš mít v těch šuplících. Oni dávají jen místo, je na tobě, jak si to celé pojmenuješ a pak jim dáš hodnotu.

Příklad použití:


#include <iostream>
using namespace std;
struct rostliny
{
char jmeno[20];
float vaha;
double cena;
};
int main()
{
rostliny venkovni =
{
"slunecnice",
0.20,
12.49
};
rostliny vyber;
cout << "kytice: " << venkovni.jmeno << " za ";
cout << venkovni.cena << " Kc\n";
vyber = venkovni; // přiřadí jednu strukturu druhé
cout << "vyber: " << vyber.jmeno << " za ";
cout << vyber.cena << " Kc\n";
return 0;
}

Tady jsme si ukázali i kopírování jedné struktury do druhé.

Pole struktur

Je možné vytvořit i pole, jehož prvky jsou struktury:


rostliny vnitrni[100];    // pole o 100 strukturách rostliny
vnitrni[0].cena;     // pouzije promennou cena ze struktury vnitrni[0]

Bitová pole

C++ (podobně jako C) vám umožňuje specifikovat strukturní členy, které zaujímají určitý počet bitů. To můžete použít např. na vytvoření datové struktury, která odpovídá registru nějakého hardwarového zařízení.


struct vypocet
{
   int key : 4;                // 4 bity pro hodnotu key
   bool otazka : 1;        // platný vstup (1 bit)
};

Pro přístup k bitovým polím použijte stejnou syntaxi jako u struktur.

vypocet.key = ...

Bitová pole se často používají na úrovni strojově orientovaného programování.

Uniony

Union je datovým formátem, který může používat různé datové typy, ale pouze jeden typ v daném okamžiku. Zatímco struktura může používat typy int, long a float, union může buď int, nebo long, nebo float. Syntaxe je podobná jako u struktur, jen význam různý.


union zkouska
{
  int hodn1;
  long hodn2;
  double hodn3;
};

Proměnnou zkouska můžete využít na uchování int, long, double pouze tak dlouho, dokud potřebujete:


zkouska stetec;
stetec.hodn1 = 15;            // uloží int
cout << stetec.hodn1;
stetec.hodn2 = 1.25;        // uloží double, hodnota int se ztratí
cout << stetec.hodn2;

Protože v jednom okamžiku proměnná obsahuje jen jednu hodnotu, musí mít dostatek prostoru na úschovu svého nevětšího členu. Z toho důvodu je velikost unionu velikostí největšího členu. Kde se používá? Úspora prostoru…

Úkol:

Vytvořte fiktivní podnik, který bude mít x struktur na seznam zaměstnanců. X je počet zaměstnanců, které určí uživatel na začátku programu. Poté bude uživatel vyzván k zadání 1. zaměstnance a tak dále, dokud se nedostane k poslednímu zaměstnanci, nebo pokud uživatel již nechce přidat dalšího zaměstnance (mezi přidáním dalšího zaměstnance bude otázka, zda si přeje založit dalšího zaměstnance). Pokud odpoví, že již ne, program vypíše všechny údaje o všech zaměstnancích v TABULCE (použití \t, \n apod.) a název firmy. Každý zaměstnanec bude mít následující udaje: jmeno, vek a druh prace. Maximální počet zaměstnanců bude 32 000 (aby to bylo int) ;)

Rada pro ty, co neví: struktury a cykly.

×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
(fotka) Lukáš ChurýLukáš je šéfredaktorem Programujte, vyvíjí webové aplikace, fascinuje ho umělá inteligence a je lektorem na FI MUNI, kde učí navrhovat studenty GUI. Poslední dobou se snaží posunout Laser Game o stupeň výše a vyvíjí pro něj nové herní aplikace a elektroniku.
Web     Twitter     Facebook     LinkedIn    

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.

Reklama autora

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ý