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

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

 

C++ - 5. lekce

Google       Google       13. 4. 2005       86 645×

  • 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 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.

Reklama
Reklama
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.

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 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ý