ODVOZENÉ DATOVÉ TYPY V C++
Textové řetězce
Char
Char je primitivní datový typ, který uchovává 1 bytový integer, který však není interpretovaný jako celé číslo, ale jako ASCII znak. Char tedy může být inicializován znakem v jednoduchých uvozovkách a nebo integerem, který bude odpovídat příslušnému znaku v ASCII tabulce.
Char sekvence
Ve zkratce pole charakterů, které v sobě uchovává více charakterů a dohromady skládají string. Pole charakterů je možné inicializovat jako jednotlivé položky pole nebo jako string, tedy pomocí dvojitých uvozovek. Pokud inicializujeme jako jednotlivé položky, posledním znakem pole by měl být nulový znak ('\0'), který označuje konec textového řetězce (pokud inicializujeme pomocí dovojitých uvozovek, tento znak se přidává automaticky).
char text[] = {'k', 'a', 'r',
'e', 'l',
'\0'};
char text[] =
"karel";
String
V C++ je string objekt, který reprezentuje sekvenci charakterů. Pokud tedy chceme použít string musíme importovat knihovnu <string>. Proměnnou poté můžeme definovat pomocí klíčového slova string a inicializujeme ji pomocí textového řetězce ve dvojitých uvozovkách.
string text =
"karel";
Operace s textovými řetězci
Pro práci s textovými řetězci slouží knihovna <cstring>, ve které se nachází spoustu užitečných funkcí.
Načítání z klávesnice
První způsob jak načíst řetězec z klávesnice je pomocí objektu cin a směrovacích šipek (>>), které slouží jako základní třída pro získávání dat od uživatele.
Druhým způsobem je metoda cin.get(), které bez zadaných argumentů vezme od uživatele pouze jeden znak. Je možno do argumentů zadat počet znaků, které má metoda od uživatele zjistit.
Třetím způsobem je metoda cin.getline(), která vezme od uživatele celý řádek nebo dokud nenarazí na znak nového řádku ('\n'). Tato metoda za uložený textový řetězec sama přidá nulový znak, který slouží jako ukončení textového řetězce
Výpis
- Výpis probíhá pomocí objektu cout.
- Dékla řetězce, velikost proměnné, kopírování
- Na zjištění délky textového řetězce v c++ slouží funkce proměnná.length() nebo proměnná.size().
- Velikost jakékoliv proměnné se zjistí pomocí funkce sizeof(proměnná)
- String lze kopírovat pomocí metody strcpy(kam,co)
Pole
Pole je datová struktura, která dokáže uchovávat více prvků stejného datového typu na jednom místě. Každý prvek má přidělený svůj vlastní prostor označený číslem(indexem). Pole inicializujeme tak jako kdybychom chtěli vytvořit jednoduchou proměnnou, jen za její název přidáme hranaté závorky a do nich napíšeme velikost pole, tedy kolik prvků chceme, aby v sobě pole mohlo uchovat. Hodnoty do pole můžeme dosazovat při inicializaci pomocí složených závorek, do kterých vpisujeme hodnoty za sebou, nebo můžeme po inicializaci pole přistoupit na určitý index pole a dosadit do něj specifickou hodnotu.
// type name [elements]
int foo [5];
int foo [5] =
{16, 2,
77, 40,
12071};
// accessing
foo[2] = 75;
x = foo[2];
Délka pole
Délku pole můžeme zjistit pomocí funkce pole.size() z knihovny array nebo pomocí formule sizeof(pole)/sizeof(*pole). Formule nejdříve zjistí velikost všech prvků v poli a poté ji vydělí velikostí jednoho prvku z pole (*pole do funkce sizeof() dosadí ukazatel na pole , ukazatel na pole ukazuje pouze na první prvek v poli, takže ukazatel na pole = jeden prvek pole ) a tak zjistíme kolik prvků se v poli vlastně nachází.
Struktura
Struktura je datová struktura, která dokáže uchovávat více proměnných nebo metod pod jedním jménem. Je velmi podobná třídě avšak se liší tím, že zde není přítomná dědičnost nebo konstruktory či destruktory. Struktura v sobě může uchovávat jak proměnné tak i metody. K těmto proměnným či metodám se přistupuje stejně jako u tříd pomocí názvu struktury, tečky a následně jménem proměnné nebo metody.
struct product {
int weight;
double price;
};
product apple;
product banana, melon;
Enum (česky: výčtový typ)
Enum umožňuje vytvoření vlastního datového typu. Můžeme definovat co se v námi vytvořeném datovém typu může nacházet. Můžeme ho na příklad použít pro vytvoření datového typu na uchovávání přistupových pravomocí, směrů nebo třeba barev.
enum Color {red, green, blue};
enum access_t {read =
1, write = 2,
exec = 4};
enum direction {left =
"l", right =
"r"};
Union
Vzhledově se podobá struktuře. Jedná se ovšem o datovou strukturu, ve které všechny prvky obsazují stejný fyzický prostor v paměti a proto union může uchovávat pouze jeden prvek v jeden čas. Velikost unionu se rovná velikosti největšího prvku, který se v něm nachází.
union mytypes_t {
char c;
int i;
float f;
} mytypes;
Kvíz
BETACo je to pole (array) v C++?
Pole (Array) představuje blok jednolité alokované paměti o určité fixní velikosti, do něhož vývojář logicky sdružuje celou sérii oddělených prvků výhradně stejného datového typu (např. desítky hodnot formátu `int` uchovávaných pod jediným jménem proměnné, které jsou dostupné přes zadaný index).
Jaký datový typ v C++ ukládá jeden znak?
Osmibitový datový typ `char` umí (díky mapování z ASCII tabulek) vtěsnat do programu vždy nanejvýš jeden konkrétní znak (např. písmeno 'A' nebo číslici '5', jež se v kódu přiřazuje s jednoduchými apostrofy). Z těchto drobných částeček znaků lze posléze skládat dlouhé textové řetězce.
Co je to `struct` v C++?
Lehká složená datová schránka přežívající už od dob vzniku jazyka C. Slouží jakožto historický předchůdce moderních Tříd a vývojáři ji dodnes využívají k logickému propojení či zabalení odlišných souvisejících dat (např. entita `Clovek` nesoucí `int vek` i `char jmeno`) pod jedinou hlavičku a instanci.
Co je to `enum` v C++?
Namísto strohých a často nesrozumitelných čísel ve stavovém slovníku stroje, umožňuje Výčtový typ (Enumerátor) elegantně zapsat konkrétní čitelné stavy (jako třeba dny či barvy, např. např. `enum Barva {CERVENA, MODRA}`). Ačkoliv se do kódu vkládá textově, vnitřnosti počítače s tím překrytým parametrem stále zachází a počítají jej rovnou od nuly jako obyčejná logická identifikační čísla typu Int.
Jak se zjistí délka C-řetězce (pole znaků) v C++?
Funkce pocházející z knihovan jazyka C, pracující na bázi primitivních pole pro typ char, mechanicky a otrocky počítá ukazatel v prohledávání po znacích a s posunem u znakové smyčky přes indexy projíždí obal na svém diskovém bloku natvrdo a spolehlivě přesně až do okamžiku, kdy nenalezne utajený binární ukončovač s formátem prázdné nuly (uzavírající definovaná lomítkem jako `\0`).
Co je to `union` v C++?
Velice archaická, ojedinělá logická konstrukce pro obal, kdy sice specifikujete přes vícero i různě obsáhlé datové typy a paramery sdílejicí ale striktně a pouze ten absolutně totožný jeden pevný a sdílený sektor. Pamět na disku na PC zkrátka vyhradí místo jen rozměrem fyzické váhy tak velkého a silnějsího elementa – a všechny ostaní, co se přepíšou, přepíšou si hodnotu jeden nad druhým ze stehného mista pamětim.
Jak se přistupuje k prvku pole na indexu 0 v C++?
Vzhledem k historickým vzorcům kompilátorových počtů (nejen) u kompilátorů u Javy z C++, ve kterých počáteční bod logiky začíná počitánim tzv. 'nulového paměťového posuvu', se po každé a vždy logický i kódovym do první uložené přihrádky pole nahlíží programom přes zapsáni nultého indexového obsazení – voláním proměnnou a pro nulkovou klíci zavřeným v hranatých rovnacíh chlívečcćxh závorkách např polé jako slovo v promřne `pole[0]`.
Jak se konkatenuje (spojuje) dva std::string objekty v C++?
Modernější a standardní objektové zpracování logicky stvroneným s nověh typem s std::string, je velmi ohleduplně pro programotorech navrzena ze C+ s ttzv pretiženi u operačním kompilatora - tím doshahje efektivita k obsluhje u spojivanách delším vetích pro stčí logicky a jednodušs na obě textové stríng proměné použité bez zbytečnýh přikaž jen pouhím intuityvm a obcejním zkladaný matemaicjkým skom zmenamem a scítávánií přes psané plusko na kávesnici '+', např složenim obouch hodnot z a + b.
Co se stane při přístupu mimo hranice pole v C++?
Na drsný rozdíl oproti kontrolované a předem opatrovácne bezpečné Jave, ketra vám okamžiťo shodi běh apkliačky a pláče hlásit v loku z bezbedčne u ošetrení o prekroče pole se vyjmkach, syrovost rychlsotu i a bezprostredno se za chladu z kompilatorú zaplatu C++ na obrat takou, že nehlísé vúbec i naproste nič (bez komntrole overovánie ram). Naopak potichouce proste slepe kód proskoci dalo k prohliživaci uz práznych kousc z mista v paměti nenačtenem u ram, čité se proste nesmystly co vedů z Undefined space behavior od do chvíle padnutí chybny z programov!
Jakou hodnotu má první prvek výčtu `enum` v C++, pokud není explicitně nastavena?
Pokut si na to vývojář v programu k logickú o kodovacim pre srozumentnách pojmoch seznam z políckuch, nespecifičkuje po položku výslovňuj a presné určeno rovniítkum od svych specifich ucislovanie za index pro hodnot (tzn neuvedomte 'např. PRVNY_JE = 1,'), překladač z chovánim z default do C++ začné pre výču autámoticke s neustalym stoupíním a pridavaní pocátečni od prveho nulovéh startovnem rovnici z prvnemu elemente na z hodnotom logickey číst s 0.