C ++

Typy C ++

Typy C ++
Entita C ++ je hodnota, objekt, odkaz, funkce, enumerátor, typ, člen třídy, bitové pole, strukturovaná vazba, obor názvů, šablona, ​​specializace šablony nebo balíček parametrů. Entita může být jednoho nebo více typů. Existují dvě kategorie typů C ++: základní a složené typy. Skalární je aritmetický nebo typ objektu ukazatele. Základní typy jsou skaláry, zatímco ostatní typy entit jsou složené typy.

Paměť počítače je řada buněk. Každá buňka má velikost jednoho bajtu, obvykle je to prostor obsazený západoevropským znakem. Velikost objektu je uvedena v bajtech. Tento článek poskytuje souhrn typů C ++. Abyste porozuměli tomuto článku, měli byste již mít základní znalosti jazyka C ++.

Obsah článku

- Základní typy
- Způsoby konstrukce typů sloučenin
- Pole
- Výčet
- Třída
- svaz
- Reference
- Funkce
- Další typy sloučenin
- Závěr

Základní typy

Základní typy jsou skalární typy.

bool

Booleovský typ nebo boolový typ má hodnotu true nebo false pro 1 nebo 0. True nebo false zabírá jeden bajt.

char, nepodepsaný char a podepsaný char

Znak je typický pro jeden západoevropský charakter. Obvykle zabírá jeden bajt. K dispozici je také nepodepsaný a podepsaný znak, což je každé osmibitové celé číslo. Nepodepsané znaky nezahrnují záporné hodnoty, zatímco podepsané znaky zahrnují záporné hodnoty. Druh hodnoty, kterou char obsahuje, závisí na kompilátoru a může to být pouze nepodepsaný char. Tyto tři typy znaků se nazývají úzké typy znaků a každý zabírá jeden bajt.

Celé číslo

Existuje pět nepodepsaných standardních celočíselných typů a pět podepsaných standardních celočíselných typů. Pět nepodepsaných celočíselných typů je: „nepodepsaný znak“, „nepodepsaný krátký int“, „nepodepsaný int“, „nepodepsaný dlouhý int“ a „nepodepsaný dlouhý dlouhý int“. Pět odpovídajících celočíselných typů se znaménkem: „signed char“, „short int“, „int“, „long int“ a „long long int“.

„Unsigned char“ je stejný typ jako úzké typy znaků (viz výše). „Signed char“ je další typ úzkých typů znaků (viz výše).

S kompilátorem g ++ zabírá „unsigned char“ nebo „signed char“ jeden bajt; „Unsigned short int“ nebo „short int“ zabírá dva bajty; „Unsigned int“ nebo „int“ zabírá čtyři bajty; „Unsigned long int“ nebo „long int“ zabírá 8 bajtů; „Unsigned long long int“ nebo „long long int“ stále zabírá 8 bajtů (od nynějška).

char16_t, char32_t, wchar_t

Při jednání se západoevropskými postavami je typ char dost v mnoha situacích. Při jednání s čínštinou a jinými východními jazyky je však zapotřebí char16_t nebo char32_t nebo wchar_t. S kompilátorem g ++ zabírá char16_t dva bajty; char32_t zabírá čtyři bajty a wchar_t také zabírá čtyři bajty.

Bool, char, char16_t, char32_t, wchar_t, podepsané a nepodepsané celočíselné typy, tvoří další sadu zvanou integrální (celočíselné) typy.

V tomto bodě článku byly zmíněny dva kolektivní typy: úzké typy znaků a integrální typy.

Typy s plovoucí desetinnou čárkou

Předpokládejme, že čísla 457 000 a 457 230 jsou stejné hodnoty měřené dvěma různými měřicími přístroji. 457 230 je přesnější než 457 000, protože hodnota je podrobnější (zahrnuje menší místa: + 200 plus 30). Číslo s plovoucí desetinnou čárkou je číslo s desetinnou částí. Ačkoli čísla v počítači jsou posloupností bitů, některá čísla s plovoucí desetinnou čárkou jsou přesnější než ta ostatní.

Některé měřicí přístroje provádějí měření v minimálních krocích, řekněme 10 jednotek. Takový nástroj by měl následující hodnoty: 10, 20, 30, 40,… 100, 110, 130, 140,… 200, 210, 220, 230, 240 atd. Ačkoli čísla v počítači jsou posloupností bitů, čísla s plovoucí desetinnou čárkou se pohybují v některých minimálních krocích (mnohem menší než 10 jednotek).

C ++ má tři typy s plovoucí desetinnou čárkou, které jsou: float, double a long double. U libovolného kompilátoru musí mít double přesnost vyšší než přesnost float nebo alespoň přesnost float; long double musí mít přesnost vyšší než přesnost double nebo alespoň přesnost double.

Existuje třetí souhrnný název: aritmetický typ. Toto je název pro typy s integrální a plovoucí desetinnou čárkou. Všimněte si, že toto je také název pro všechny skalární typy, jak je dosud vysvětleno.

S překladačem g ++ je počet bajtů pro float čtyři; počet bytů pro double je osm; počet bajtů pro dlouhý dvojitý je šestnáct.

neplatný typ

S kompilátorem g ++ je velikost prázdného typu jeden bajt. Bajt oficiálně nemá žádné bity, což znamená, že jeho umístění má prázdný obsah.

Způsoby konstrukce typů sloučenin

Složené typy nejsou nepodstatné typy. To znamená, že složené typy jsou nekalární typy. Tato část vysvětluje základy typů sloučenin.

Pole

Následující segment kódu ukazuje pole ints a pole chars:

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

Výčet

Výčet je typ s pojmenovanými konstantami. Zvažte následující segment kódu:

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

Výstup je: 4. První řádek segmentu kódu je výčet a a, b nebo c je výčet.

Třída

Třída je zobecněná jednotka, ze které lze vytvořit (vytvořit instanci) mnoho objektů stejné zobecněné jednotky. Následující program ukazuje třídu a dva objekty z ní vytvořené. Takový objekt se liší od skalárního objektu.

#zahrnout
pomocí jmenného prostoru std;
třída TheCla

veřejnost:
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ázev třídy je TheCla a názvy dvou objektů jsou obj1 a obj2. Všimněte si středníku hned za popisem (definicí) třídy. Všimněte si, jak byly dva objekty vytvořeny ve funkci main ().

Poznámka: num je datový člen a fn je členská funkce.

svaz

struktur

Struktura je jako pole, ale místo párů index / hodnota má páry název / hodnota. Jména lze psát v libovolném pořadí. Následující program ukazuje strukturu a její použití:

#zahrnout
pomocí jmenného prostoru std;
struktura 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ýstupem je:

5, 2.3, a

Název struktury je TheCla. obj1 a obj2 jsou dva různé objekty struktury.

svaz

Následující program ukazuje spojení a jeho použití:

#zahrnout
pomocí jmenného prostoru std;
unie 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. Spojení je podobné struktuře. Hlavní rozdíl mezi strukturou a sjednocením spočívá v tom, že pro strukturu může mít hodnotu (inicializovanou) kdykoli pouze jeden člen. Ve výše uvedeném programu má člen flt hodnotu 2.3. Každý z ostatních členů, num nebo ch, může mít další hodnotu pouze v případě, že je opuštěna hodnota pro flt.

Reference

Odkaz je synonymem pro identifikátor. Následující segment kódu ukazuje, jak získat 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 jsou synonyma k id.

lvalue Reference a rvalue Reference

Výše uvedené odkazy jsou odkazy na hodnoty. Následující kód ukazuje odkaz rvalue:

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

Výstup je: 5. Tato reference je vytvořena bez identifikace jakéhokoli místa v paměti. K dosažení tohoto cíle je zapotřebí dvojité &, tj.E., &&.

Ukazatel

Ukazatel není ve skutečnosti entitou C ++. Poskytuje však lepší schéma pro práci s referencemi. Následující kód ukazuje, jak lze vytvořit ukazatel: The following code shows how a pointer can be created:

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

Výstup je: 5. Všimněte si rozdílu v názvu mezi ptdId a ptdId. ptdId je špičatý objekt a ptrId je objekt ukazatele. & ptdId vrátí adresu špičatého objektu, který je přiřazen ptrId. Chcete-li vrátit hodnotu špičatého objektu, použijte * ptrId.

Funkce

Základní funkce a její volání

Následující kód ukazuje základní definici funkce a její volání:

#zahrnout
pomocí jmenného prostoru 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

definice funkce

5

Volání funkce je fn (5). Název funkce je fn.

Odkaz a ukazatel na funkci

& fn vrátí adresu v paměti funkce, jejíž jméno je fn. Následující příkaz deklaruje ukazatel na funkci:

int (* func) ();

Zde je func název ukazatele na funkci. První dvojice závorek odlišuje tento ukazatel funkce od ukazatele skalárního objektu. func lze provést pro uchování adresy funkce identifikované fn, a to následovně:

func = &fn;

Následující program uvádí odkaz na funkci a ukazatel do akce:

#zahrnout
pomocí jmenného prostoru std;
int fn (int num)

/ * některá prohlášení * /
návratové číslo;

int main ()

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

Výstup je: 5. Všimněte si, že fn i func mají v deklaraci parametr int.

Další typy sloučenin

Výše uvedené základní typy sloučenin jsou samy o sobě sloučeniny. Používají se také ke konstrukci propracovaných typů sloučenin.

typedef

Typedef vyhrazené slovo se používá k nahrazení posloupnosti typů jedním názvem (pro posloupnost). Následující segment kódu to ilustruje:

typedef unsigned long int IduIL;

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

Výstup je 555555555555555555. V kódu se IduIL stal typem, který znamená „unsigned long int“.

Strukturovaná vazba

Strukturovaná vazba je funkce, která umožňuje pojmenování podobjektů. Následující kód to ilustruje pro 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 dostaly jména, x, y, z. Všimněte si použití a polohy vyhrazeného slova, automaticky. Všimněte si také použití hranatých závorek.

Bitové pole

Paměť je sekvence buněk. Každá buňka má bajt. Každý bajt se také skládá z osmi bitů. Lze nastavit a změnit skupinu bitů, ne nutně osm bitů. Taková skupina se nazývá bitové pole. Tyto skupiny by ležely vedle sebe. Pokud skupiny nevytvoří typ, řekněme 16 bitů pro krátký int, přidají se výplňové bity. Následující kód to ilustruje strukturou:

Stručné datum

nepodepsaný krátký týden: 3; // 3 bity
unsigned short monDay: 6; // 6 bitů
nepodepsaný krátký měsíc: 5; // 5 bitů
krátký nepodepsaný rok: 8; // 8 bitů pro 2místný 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 bitů pro wkDay, MonDay a mon je 3 + 6 + 5 = 14. Byly by tedy přidány dva výplňové bity, aby tvořily 16 bitů pro krátké celé číslo 2 bajty (16 bitů). Dalších 8 bitů začíná dalším krátkým intem, který je poté naplněn 8 polstrovanými bity.

Poznámka: Nepoužívejte bitová pole; používat pouze pro výzkum.

Jmenný prostor

Obor názvů je sada jmen, která by neměla být v konfliktu se stejnými jmény jiných sad jmen. Následující program ilustruje použití stejných jmen ze dvou různých jmenných prostorů, které se používají v oboru názvů funkce main ():

#zahrnout
pomocí jmenného prostoru std;
jmenný prostor NS1

int myInt = 8;
float flt;

jmenný prostor 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ýstupem je:

9

8

2.5

4.8

V kódu jsou dva konfliktní stejné int názvy a dva konfliktní stejné názvy float.

Šablona a specializace šablony

Schéma šablony umožňuje použití zástupného symbolu pro různé možné skalární typy. Specializací je výběr konkrétního skalárního typu. Následující kód to ilustruje pro funkci:

#zahrnout
pomocí jmenného prostoru std;
template void func (T cha, U no)

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

int main ()

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

Výstupem je:

"Potřebuji chléb za 3 dolary.".“

Sada parametrů šablony

Překladatelé tuto funkci ještě musí plně implementovat - viz dále.

Závěr

Typy C ++ existují ve dvou kategoriích: základní typy a složené typy. Základní typy jsou skalární typy. Základní složené typy jsou pole, výčty, třídy, odbory, odkazy, ukazatele a funkce. Tyto základní typy sloučenin se používají ke konstrukci propracovaných typů sloučenin, kterými jsou typedef, strukturované vazby, bitová pole, jmenný prostor a funkce šablony.

Chrys

Trackpad a ukazatel myši AppyMouse na obrazovce pro tablety Windows
Uživatelé tabletů často postrádají ukazatel myši, zejména když obvykle používají notebooky. Dotykové smartphony a tablety mají mnoho výhod a jediným o...
Střední tlačítko myši nefunguje ve Windows 10
The prostřední tlačítko myši pomáhá procházet dlouhé webové stránky a obrazovky se spoustou dat. Pokud se to zastaví, budete nakonec používat klávesni...
Jak změnit levé a pravé tlačítko myši na počítači se systémem Windows 10
Je úplnou normou, že všechna zařízení počítačových myší jsou ergonomicky navržena pro praváky. K dispozici jsou však myší zařízení, která jsou speciál...