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

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

 

C++ - 5. lekce

Google       Google       13. 4. 2005       89 001×

  • 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 První český hackathon ve vlaku inspirovaly služby jako  Tinder, Airbnb nebo Uber

První český hackathon ve vlaku inspirovaly služby jako Tinder, Airbnb nebo Uber

Patnáct set kilometrů, cesta přes dva státy, šestnáct hodin programování a přísun
energy drinků, tak by se dal shrnout unikátní hackathon ve vlaku pořádaný Kiwi.com.
Z Prahy do Košic a zpět se svezlo celkem 13 týmů, každý s originálním nápadem. Hlavní
výhru, voucher na letenky v hodnotě 2 500 EUR, si v Praze převzal tým až z Ukrajiny.
Společně naprogramovali aplikaci Fly2event, která vytváří cestovatelské balíčky ušité
uživatelům na míru podle toho, co si „olajkovali“ na Facebooku. Projekt má i podle
organizátorů budoucnost a jeho tvůrci ho v současnosti už spouští na webové stránce
fly2event.com.

Reklama
Reklama
Obrázek ke článku Gamifikace nakupování dorazila i do České republiky

Gamifikace nakupování dorazila i do České republiky

Zákazníci zejména retailových společností jsou často znuděni klasickými věrnostními či motivačními programy. Většinou z toho důvodu, že jsou jeden jako druhý a nepřináší nic nového. Ale i v České republice se projevují zahraniční trendy, nedávno zde totiž vstoupila na trh a rychle se uchytila nová platforma kombinující to nejlepší z věrnostních a motivačních programů, která navíc využívá prvky gamifikace – Rondo.cz. Na hlavní milníky vývoje nálad a motivace zákazníků a nejnovější trendy se zaměřil Jan Hřebabecký, spoluzakladatel Rondo.cz

Obrázek ke článku NopCommerce – datová vrstva a přístup k datům – 2. díl

NopCommerce – datová vrstva a přístup k datům – 2. díl

V minulém článku jsme si představili platformu NopCommerce z globálního pohledu. V dnešním díle se již zaměříme na konkrétní část systému, a to datovou vrstvu. Představíme si základní stavební kameny systému v podobě doménových objektů. Ukážeme si, jakým způsobem rozšířit doménové objekty a jakým způsobem přistupuje NopCommerce k nastavení systému a modulů.

Reklama autora

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