C ++

Typy C ++

Typy C ++
Entita C ++ je hodnota, objekt, referencia, funkcia, enumerátor, typ, člen triedy, bitové pole, štruktúrovaná väzba, menný priestor, šablóna, špecializácia šablóny alebo balík parametrov. Subjekt môže byť jedného alebo viacerých typov. Existujú dve kategórie typov C ++: základné a zložené typy. Skalárny je aritmetický alebo ukazovateľový typ objektu. Základné typy sú skaláre, zatiaľ čo zvyšok typov entít sú zložené typy.

Pamäť počítača je rad buniek. Každá bunka má veľkosť jedného bajtu, obvykle ide o priestor obsadený západoeurópskym znakom. Veľkosť objektu je uvedená v bajtoch. Tento článok poskytuje súhrn typov C ++. Aby ste pochopili tento článok, mali by ste už mať základné znalosti jazyka C ++.

Obsah článku

- Základné typy
- Spôsoby konštrukcie typov zlúčenín
- Polia
- Vymenovanie
- Trieda
- Únie
- Referencie
- Funkcie
- Ďalšie typy zlúčenín
- Záver

Základné typy

Základné typy sú skalárne typy.

bool

Boolovský typ alebo boolovský typ má hodnotu true alebo false pre 1 alebo 0. Pravda alebo nepravda zaberá jeden bajt.

char, nepodpísaný char a podpísaný char

Znak je typický pre jeden západoeurópsky charakter. Spravidla zaberá jeden bajt. K dispozícii je tiež nepodpísaný a podpísaný znak, ktorým je každé osembitové celé číslo. Nepodpísané znaky nezahŕňajú záporné hodnoty, zatiaľ čo podpísané znaky zahŕňajú záporné hodnoty. Druh hodnoty, ktorú má char, závisí od kompilátora a môže ísť iba o nepodpísaný char. Tieto tri typy znakov sa nazývajú úzke typy znakov a každý z nich zaberá jeden bajt.

Celé číslo

Existuje päť štandardných typov celých čísel bez znamienka a päť štandardných typov celých čísel so znamienkom. Päť nepodpísaných celočíselných typov je: „nepodpísaný char“, „nepodpísaný krátky int“, „nepodpísaný int“, „nepodpísaný dlhý int“ a „nepodpísaný dlhý dlhý int“. Päť zodpovedajúcich celočíselných typov so znamienkom je: „podpísaný char“, „short int“, „int“, „long int“ a „long long int“.

„Nepodpísaný znak“ je rovnakého typu ako úzke typy znakov (pozri vyššie). „Podpísaný znak“ je ďalší typ úzkych typov znakov (pozri vyššie).

S kompilátorom g ++ zaberajú „unsigned char“ alebo „signed char“ jeden bajt; „Unsigned short int“ alebo „short int“ zaberá dva bajty; „Unsigned int“ alebo „int“ zaberá štyri bajty; „Unsigned long int“ alebo „long int“ zaberá 8 bajtov; „Unsigned long long int“ alebo „long long int“ stále zaberá 8 bajtov (odteraz).

char16_t, char32_t, wchar_t

Pokiaľ ide o západoeurópske postavy, typ char je v mnohých situáciách dosť. Pri rokovaniach s čínštinou a inými východnými jazykmi je však potrebný znak char16_t alebo char32_t alebo wchar_t. S kompilátorom g ++ zaberá char16_t dva bajty; char32_t zaberá štyri bajty a wchar_t tiež zaberá štyri bajty.

Bool, char, char16_t, char32_t, wchar_t, podpísané a nepodpísané celočíselné typy tvoria ďalšiu množinu nazývanú integrálne (celočíselné) typy.

Na tomto mieste v článku boli spomenuté dva kolektívne typy: úzke typy znakov a integrálne typy.

Typy s pohyblivou rádovou čiarkou

Predpokladajme, že čísla 457 000 a 457 230 sú rovnaké hodnoty namerané dvoma rôznymi meracími prístrojmi. 457 230 je presnejšia ako 457 000, pretože hodnota je podrobnejšia (týka sa menších miest: + 200 plus 30). Číslo s pohyblivou rádovou čiarkou je číslo so zlomkovou (desatinnou) časťou. Aj keď čísla v počítači sú postupnosťou bitov, niektoré čísla s pohyblivou rádovou čiarkou sú presnejšie ako ostatné.

Niektoré meracie prístroje merajú v minimálnych krokoch, napríklad 10 jednotiek. Takýto prístroj by mal tieto hodnoty: 10, 20, 30, 40,… 100, 110, 130, 140,… 200, 210, 220, 230, 240 atď. Aj keď sú čísla v počítači postupnosťou bitov, čísla s pohyblivou rádovou čiarkou sa pohybujú v minimálnych krokoch (oveľa menších ako 10 jednotiek).

C ++ má tri typy s pohyblivou rádovou čiarkou, ktoré sú: float, double a long double. Pre každý prekladač musí mať double presnosť vyššiu ako presnosť float alebo minimálne presnosť float; dlhá dvojitá musí mať presnosť vyššiu ako dvojitá alebo aspoň presnosť dvojnásobnej.

Existuje tretí súhrnný názov: aritmetický typ. Toto je názov pre typy s integrálnou a pohyblivou rádovou čiarkou. Všimnite si, že toto je tiež názov pre všetky skalárne typy, ako bolo doteraz vysvetlené.

S kompilátorom g ++ je počet bajtov floatu štyri; počet bytov pre double je osem; počet bajtov pre dlhú dvojku je šestnásť.

neplatný typ

S kompilátorom g ++ je veľkosť prázdneho typu jeden bajt. Bajt oficiálne nemá žiadne bity, čo znamená, že jeho umiestnenie má prázdny obsah.

Spôsoby konštrukcie typov zlúčenín

Zložené typy sú nepodstatné typy. To znamená, že zložené typy sú skalárne typy. Táto časť vysvetľuje základy zložených typov.

Polia

Nasledujúci segment kódu zobrazuje pole ints a pole znakov:

int arrInt [] = 1, 2, 3, 4, 5;
char arrCha [] = 'a', 'b', 'c', 'd', 'e';
cout << arrInt[2] <<" <Výstup je: 3 c.

Vymenovanie

Výčet je typ s pomenovanými konštantami. Zvážte nasledujúci segment kódu:

enum a = 3, b, c;
cout << b <<'\n';

Výstup je: 4. Prvý riadok segmentu kódu je enumerácia a a, b alebo c je enumerátor.

Trieda

Trieda je zovšeobecnená jednotka, z ktorej je možné vytvoriť (vytvoriť inštanciu) veľa objektov tej istej zovšeobecnenej jednotky. Nasledujúci program zobrazuje triedu a dva objekty z nej vytvorené. Takýto objekt sa líši od skalárneho objektu.

#include
pomocou namespace std;
trieda TheCla

verejné:
int num = 5;
int fn ()

návratové číslo;

;
int main ()

TheCla obj1;
TheCla obj2;
cout << obj1.num << " << obj2.num <<'\n';
návrat 0;

Výstup je: 5 5. Názov triedy je TheCla a názvy dvoch objektov sú obj1 a obj2. Bodkočiarku si všimnite hneď za popisom (definíciou) triedy. Všimnite si, ako boli dva objekty inštancované vo funkcii main ().

Poznámka: num je dátový člen a fn je členská funkcia.

Únie

štruktúr

Štruktúra je ako pole, ale namiesto párov index / hodnota má páry názov / hodnota. Mená môžu byť napísané v ľubovoľnom poradí. Nasledujúci program zobrazuje štruktúru a jej použitie:

#include
pomocou namespace std;
Štruktúra TheCla

int num = 5;
float flt = 2.3;
char ch = 'a';
obj1, obj2;
int main ()

cout << obj2.num <<", "<< obj2.flt <<", "<< obj2.ch <<'\n';
návrat 0;

Výstup je:

5, 2.3, a

Názov štruktúry je TheCla. obj1 a obj2 sú dva rôzne objekty štruktúry.

Únie

Nasledujúci program ukazuje úniu a jej použitie:

#include
pomocou namespace std;
únie TheCla

int num;
float flt = 2.3;
char ch;
obj1, obj2;
int main ()

cout << obj2.flt <<'\n';
návrat 0;

Výstup je: 2.3. Únia je podobná štruktúre. Hlavný rozdiel medzi štruktúrou a spojením je v tom, že pre štruktúru môže mať hodnotu (inicializovanú) kedykoľvek iba jeden člen. Vo vyššie uvedenom programe má člen flt hodnotu 2.3. Každý z ďalších členov, num alebo ch, môže mať nasledujúcu hodnotu iba v prípade, že je opustená hodnota pre flt.

Referencie

Referencia je synonymum pre identifikátor. Nasledujúci segment kódu ukazuje, ako získať odkaz na identifikátor:

int id = 5;
int & ref1 = id;
int & ref2 = id;
cout << id << " << ref1 << " << ref2 <<'\n';

Výstup je: 5 5 5. ref1 a ref2 sú synonymá k id.

referencia lvalue a referencia rvalue

Vyššie uvedené odkazy sú referencie hodnoty. Nasledujúci kód zobrazuje referenciu rvalue:

int && ref = 5;
cout << ref <<'\n';

Výstup je: 5. Tento odkaz sa vytvorí bez identifikácie ľubovoľného umiestnenia v pamäti. Aby sme to dosiahli, je potrebné dvojité &, t.j.e., &&.

Ukazovateľ

Ukazovateľ nie je v skutočnosti entitou C ++. Poskytuje však lepšiu schému riešenia referencií. Nasledujúci kód ukazuje, ako je možné vytvoriť ukazovateľ:

int ptdId = 5;
int ptdId = 5;
int * ptrId;
ptrId = &ptdId;
cout << *ptrId <<'\n';

Výstup je: 5. Všimnite si rozdiel v názve medzi ptdId a ptdId. ptdId je špičatý objekt a ptrId je ukazovateľový objekt. & ptdId vráti adresu zaostreného objektu, ktorá je priradená k ptrId. Na vrátenie hodnoty zahroteného objektu použite * ptrId.

Funkcie

Základná funkcia a jej volanie

Nasledujúci kód zobrazuje základnú definíciu funkcie a jej volanie:

#include
pomocou namespace std;
int fn (int num)

cout<<"seen"<<'\n';
návratové číslo;

int main ()

int ret = fn (5);
cout << ret <<'\n';
návrat 0;

Výstup je

definícia funkcie

5

Volanie funkcie je fn (5). Názov funkcie je fn.

Referencia a ukazovateľ na funkciu

& fn vráti adresu v pamäti funkcie, ktorej meno je fn. Nasledujúci príkaz deklaruje ukazovateľ na funkciu:

int (* func) ();

Tu je func názov ukazovateľa na funkciu. Prvá dvojica zátvoriek odlišuje tento ukazovateľ funkcie od ukazovateľa skalárneho objektu. func sa dá urobiť pre uchovanie adresy funkcie identifikovanej pomocou fn nasledovne:

func = &fn;

Nasledujúci program uvádza do činnosti odkaz na funkciu a ukazovateľ:

#include
pomocou namespace std;
int fn (int num)

/ * niektoré vyjadrenia * /
návratové číslo;

int main ()

int (* func) (int);
func = &fn;
int ret = func (5);
cout << ret <<'\n';
návrat 0;

Výstup je: 5. Upozorňujeme, že fn aj func majú v deklarácii parameter int.

Ďalšie typy zlúčenín

Vyššie uvedené základné typy zlúčenín sú samy osebe zlúčeniny. Používajú sa tiež na konštrukciu prepracovaných typov zlúčenín.

typedef

Vyhradené slovo typedef sa používa na nahradenie postupnosti typov jedným menom (pre postupnosť). Ilustruje to nasledujúci segment kódu:

typedef unsigned long int IduIL;

IduIL myInt = 555555555555555555;
cout << myInt <<'\n';

Výstup je 555555555555555555. V kóde sa IduIL stal typom, ktorý znamená „unsigned long int“.

Štruktúrované viazanie

Štruktúrovaná väzba je funkcia, ktorá umožňuje pomenovanie podobjektov. Nasledujúci kód to ilustruje pre pole:

int arr [3] = 1, 2, 3;
auto [x, y, z] (arr);
cout << x <<"<< y <<"<< z <<'\n';

Výstup je 1 2 3. Hodnoty: 1, 2, 3 dostali názvy, x, y, z. Všimnite si použitie a pozíciu vyhradeného slova, automaticky. Nezabudnite tiež na použitie hranatých zátvoriek.

Bitové pole

Pamäť je postupnosťou buniek. Každá bunka zaberá bajt. Každý bajt tiež pozostáva z ôsmich bitov. Je možné nastaviť a zmeniť skupinu bitov, nie nevyhnutne osem bitov. Takáto skupina sa nazýva bitové pole. Tieto skupiny by ležali vedľa seba. Ak skupiny nebudú tvoriť typ, povedzme 16 bitov pre krátky int, pridajú sa výplňové bity. Nasledujúci kód to ilustruje so štruktúrou:

Stručný dátum

nepodpísaný krátky týždeň: 3; // 3 bity
nepodpísaný krátky pondelok: 6; // 6 bitov
nepodpísaný krátky mesiac: 5; // 5 bitov
nepodpísaný krátky rok: 8; // 8 bitov pre dvojciferný rok
dte;
dte.wkDay = 1; dte.monDay = 2; dte.mon = 2; dte.rok = 21;
cout << dte.mon <<'/'<< dte.monDay <<'/'<< dte.yr <<'\n';

Výstup je: 2/2/21. Celkový počet bitov pre wkDay, MonDay a mon je 3 + 6 + 5 = 14. Takže by sa pridali dva výplňové bity, aby tvorili 16 bitov pre krátke celé číslo 2 bajty (16 bitov). Nasledujúcich 8 bitov začína ďalším krátkym int, ktorý je potom vyplnený 8 vyplňovacími bitmi.

Poznámka: Nepoužívajte bitové polia; používať iba na výskum.

Menný priestor

Obor názvov je skupina mien, ktorá by nemala byť v rozpore s rovnakými názvami ostatných skupín mien. Nasledujúci program ilustruje použitie rovnakých mien z dvoch rôznych menných priestorov, ktoré sa používajú v mennom priestore funkcie main ():

#include
pomocou namespace std;
menný priestor NS1

int myInt = 8;
float flt;

menný priestor NS2

int myInt = 9;
float flt;

int main ()

cout << NS1::myInt << '\n';
cout << NS2::myInt << '\n';
NS1 :: flt = 2.5;
NS2 :: flt = 4.8;
cout << NS1::flt << '\n';
cout << NS2::flt << '\n';
návrat 0;

Výstup je:

9

8

2.5

4.8

V kóde sú dva protichodné rovnaké názvy int a dva protichodné rovnaké názvy float.

Šablóna a špecializácia šablón

Schéma šablón umožňuje použitie zástupného symbolu pre rôzne možné skalárne typy. Špecializáciou je výber konkrétneho skalárneho typu. Nasledujúci kód to ilustruje pre funkciu:

#include
pomocou namespace std;
template void func (T cha, U no)

cout << "I need bread for " << cha << no << '.' << '\n';

int main ()

func ('$', 3);
návrat 0;

Výstup je:

"Potrebujem chlieb za 3 doláre.".“

Sada parametrov šablón

Kompilátory túto funkciu ešte musia plne implementovať - ​​pozri ďalej.

Záver

Typy C ++ existujú v dvoch kategóriách: základné typy a zložené typy. Základné typy sú skalárne typy. Základné zložené typy sú polia, výčty, triedy, zväzy, odkazy, ukazovatele a funkcie. Tieto základné typy zlúčenín sa používajú na konštrukciu prepracovaných typov zlúčenín, ktorými sú typedef, štruktúrované väzby, bitové polia, menný priestor a vlastnosti šablón.

Chrys

Hry Ako vyvíjať hru v systéme Linux
Ako vyvíjať hru v systéme Linux
Pred desiatimi rokmi by len málo používateľov Linuxu predpovedalo, že ich obľúbený operačný systém bude jedného dňa populárnou hernou platformou pre k...
Hry Open source porty komerčných herných strojov
Open source porty komerčných herných strojov
Na hranie starých i niektorých z nedávnych herných titulov je možné využiť bezplatné hry s otvoreným zdrojom a multiplatformové herné enginy. V tomto ...
Hry Najlepšie hry z príkazového riadku pre systém Linux
Najlepšie hry z príkazového riadku pre systém Linux
Príkazový riadok nie je pri použití systému Linux iba vaším najväčším spojencom - môže byť tiež zdrojom zábavy, pretože ho môžete použiť na hranie mno...