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ýč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.
#zahrnoutpomocí 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í:
#zahrnoutpomocí 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í:
#zahrnoutpomocí 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í:
#zahrnoutpomocí 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:
#zahrnoutpomocí 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é datumnepodepsaný 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 ():
#zahrnoutpomocí 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:
#zahrnoutpomocí 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