Sjećanje računala je niz stanica. Svaka ćelija ima veličinu jednog bajta, to je obično prostor koji zauzima zapadnoeuropski lik. Veličina objekta navedena je u bajtovima. Ovaj članak daje sažetak tipova C ++. Već biste trebali imati osnovno znanje o C ++-u, kako biste razumjeli ovaj članak.
Sadržaj članka
- Temeljne vrste
- Načini konstruiranja složenih vrsta
- Nizovi
- Nabrajanje
- Razred
- Unija
- Reference
- Funkcije
- Ostale vrste spojeva
- Zaključak
Temeljne vrste
Osnovni tipovi su skalarni tipovi.
bool
Booleov tip ili bool tip ima vrijednost true ili false za 1 ili 0. Točno ili netačno zauzima jedan bajt.
char, nepotpisani char i potpisani char
Char je obično za jedan zapadnoeuropski lik. Obično zauzima jedan bajt. Tu je i nepotpisani i potpisani char, koji je svaki osmobitni cijeli broj. Nepotpisani znakovi ne uključuju negativne vrijednosti, dok potpisani znakovi uključuju negativne vrijednosti. Vrijednost koju char ima ovisi o prevoditelju i može biti samo nepotpisani char. Te tri vrste znakova nazivaju se uskim vrstama znakova i svaka zauzima jedan bajt.
Cijeli broj
Postoji pet nepotpisanih standardnih cijelih brojeva i pet potpisanih standardnih cijelih brojeva. Pet vrsta nepotpisanih cijelih brojeva su: "unsigned char", "unsigned short int", "unsigned int", "unsigned long int" i "unsigned long long int". Pet odgovarajućih vrsta potpisanih cijelih brojeva su: „potpisani char“, „short int“, „int“, „long int“ i „long long int“.
"Nepotpisani znak" je isti tip kao i uski tipovi znakova (vidi gore). "Potpisani znak" je druga vrsta uskih tipova znakova (vidi gore).
S kompajlerom g ++, "unsigned char" ili "signed char" zauzima jedan bajt; "Unsigned short int" ili "short int" zauzima dva bajta; "Unsigned int" ili "int" zauzima četiri bajta; "Unsigned long int" ili "long int" zauzima 8 bajtova; "Unsigned long long int" ili "long long int" i dalje zauzima 8 bajtova (od sada).
char16_t, char32_t, wchar_t
Kad se radi sa zapadnoeuropskim likovima, tip char je dovoljan u mnogim situacijama. Međutim, kada se radi s kineskim i drugim istočnim jezicima, potreban je char16_t, ili char32_t, ili wchar_t. S kompajlerom g ++ char16_t zauzima dva bajta; char32_t zauzima četiri bajta, a wchar_t također zauzima četiri bajta.
Bool, char, char16_t, char32_t, wchar_t, potpisani i nepotpisani cjelobrojni tipovi čine još jedan skup, koji se naziva integralni (cjelobrojni) tipovi.
U ovom su se trenutku u članku spomenule dvije kolektivne vrste: uski tipovi znakova i integralni tipovi.
Vrste s pomičnom zarezom
Pretpostavimo da su brojevi 457.000 i 457.230 isto očitanje, mjereno s dva različita mjerna instrumenta. 457.230 preciznije je od 457.000 jer je vrijednost detaljnija (uključuje manja mjesta: + 200 plus 30). Broj s pomičnom zarezom je broj s razlomljenim (decimalnim) dijelom. Iako su brojevi u računalu slijed bitova, neki su brojevi s pomičnom zarezom precizniji od ostalih.
Neki mjerni instrumenti vrše mjerenja u minimalnim koracima, recimo 10 jedinica. Takav instrument imao bi sljedeća očitanja: 10, 20, 30, 40, ... 100, 110, 130, 140, ... 200, 210, 220, 230, 240 itd. Iako su brojevi u računalu slijed bitova, brojevi s pomičnom zarezom kreću se u nekim minimalnim koracima (mnogo manji od 10 jedinica).
C ++ ima tri vrste s pomičnom zarezom, a to su: float, double i long double. Za bilo koji kompajler, double mora imati preciznost koja je veća od float ili barem float; long double mora imati preciznost koja je veća od one double ili barem one double.
Postoji treći skupni naziv: aritmetički tip. Ovo je naziv za integralne i tipove s pomičnom zarezom. Imajte na umu da je ovo također naziv za sve skalarne tipove, kao što je do sada objašnjeno.
S kompajlerom g ++, broj bajtova za float je četiri; broj bajtova za dvostruko je osam; broj bajtova za dugi dvostruki je šesnaest.
void Tip
S kompajlerom g ++, veličina void tipa je jedan bajt. Bajt službeno nema bitova, što znači da njegovo mjesto ima prazan sadržaj.
Načini konstruiranja složenih vrsta
Složeni tipovi nisu osnovni tipovi. To znači da su složeni tipovi neskalarni tipovi. Ovaj odjeljak objašnjava osnove složenih vrsta.
Nizovi
Sljedeći segment koda prikazuje niz intova i niz znakova:
int arrInt [] = 1, 2, 3, 4, 5;char arrCha [] = 'a', 'b', 'c', 'd', 'e';
cout << arrInt[2] <<" <
Nabrajanje
Nabrajanje je vrsta s imenovanim konstantama. Razmotrite sljedeći segment koda:
nabrajanje a = 3, b, c;cout << b <<'\n';
Izlaz je: 4. Prvi redak segmenta koda je nabrajanje, a a, b ili c je popisivač.
Razred
Klasa je generalizirana jedinica od koje se mogu stvoriti (instancirati) mnogi objekti iste generalizirane jedinice. Sljedeći program prikazuje klasu i dva objekta koja su iz nje izrađena. Takav se objekt razlikuje od skalarnog objekta.
#includepomoću prostora imena std;
razred TheCla
javnost:
int broj = 5;
int fn ()
povratni broj;
;
int main ()
TheCla obj1;
TheCla obj2;
cout << obj1.num << " << obj2.num <<'\n';
return 0;
Izlaz je: 5 5. Ime klase je TheCla, a imena dvaju objekata su obj1 i obj2. Zapišite točku i zarez odmah nakon opisa (definicije) klase. Primijetite kako su dva objekta instancirana u funkciji main ().
Napomena: num je član podataka, a fn je funkcija člana.
Unija
strukt
Struktura je poput niza, ali umjesto da ima parove indeks / vrijednost, ona ima parove ime / vrijednost. Imena mogu biti napisana bilo kojim redoslijedom. Sljedeći program prikazuje strukturu i njezinu upotrebu:
#includepomoću prostora imena std;
struct TheCla
int broj = 5;
float flt = 2.3;
char ch = 'a';
obj1, obj2;
int main ()
cout << obj2.num <<", "<< obj2.flt <<", "<< obj2.ch <<'\n';
return 0;
Izlaz je:
5, 2.3, a
Naziv strukture je TheCla. obj1 i obj2 su dva različita objekta strukture.
Unija
Sljedeći program prikazuje uniju i njezinu upotrebu:
#includepomoću prostora imena std;
sindikat TheCla
int num;
float flt = 2.3;
char ch;
obj1, obj2;
int main ()
cout << obj2.flt <<'\n';
return 0;
Izlaz je: 2.3. Unija je slična strukturi. Glavna razlika između struct i union je u tome što za struct samo jedan član može imati vrijednost (inicijaliziranu) u bilo kojem trenutku. U gornjem programu, član, flt ima vrijednost 2.3. Svaki od ostalih članova, num ili ch, može imati vrijednost sljedeću samo ako je vrijednost za flt napuštena.
Reference
Referenca je sinonim za identifikator. Sljedeći segment koda pokazuje kako dobiti referencu na identifikator:
int id = 5;int & ref1 = id;
int & ref2 = id;
cout << id << " << ref1 << " << ref2 <<'\n';
Izlaz je: 5 5 5. ref1 i ref2 su sinonimi za id.
Referenca lvalue i Referenca rvalue
Gornje reference su reference vrijednosti. Sljedeći kod prikazuje referencu rvalue:
int && ref = 5;cout << ref <<'\n';
Izlaz je: 5. Ova referenca kreira se bez identificiranja bilo kojeg mjesta u memoriji. Da bi se to postiglo, potrebno je udvostručiti &, tj.e., &&.
Pokazivač
Pokazivač zapravo nije C ++ entitet. Međutim, pruža bolju shemu bavljenja referencama. Sljedeći kod pokazuje kako se može stvoriti pokazivač:
int ptdId = 5;int ptdId = 5;
int * ptrId;
ptrId = &ptdId;
cout << *ptrId <<'\n';
Izlaz je: 5. Obratite pažnju na razliku u nazivu između ptdId i ptdId. ptdId je šiljasti objekt, a ptrId je pokazivački objekt. & ptdId vraća adresu istaknutog objekta koja je dodijeljena ptrId. Da biste vratili vrijednost istaknutog objekta, upotrijebite * ptrId.
Funkcije
Osnovna funkcija i njezin poziv
Sljedeći kod prikazuje osnovnu definiciju funkcije i njezin poziv:
#includepomoću prostora imena std;
int fn (int broj)
cout<<"seen"<<'\n';
povratni broj;
int main ()
int ret = fn (5);
cout << ret <<'\n';
return 0;
Izlaz je
definicija funkcije
5
Poziv funkcije je fn (5). Naziv funkcije je fn.
Referenca i pokazivač na funkciju
& fn vrati adresu u memoriju funkcije čije je ime fn. Sljedeća izjava deklarira pokazivač na funkciju:
int (* func) ();Ovdje je func naziv pokazivača na funkciju. Prvi par zagrada razlikuje ovaj pokazivač funkcije od pokazivača skalarnog objekta. Func može biti načinjen da drži adresu funkcije identificirane fn, kako slijedi:
func = &fn;Sljedeći program aktivira referencu i pokazivač funkcije:
#includepomoću prostora imena std;
int fn (int broj)
/ * neke izjave * /
povratni broj;
int main ()
int (* func) (int);
func = &fn;
int ret = func (5);
cout << ret <<'\n';
return 0;
Izlaz je: 5. Imajte na umu da i fn i func imaju parametar int u deklaraciji.
Ostale vrste spojeva
Gore navedene osnovne vrste spojeva same su po sebi složene. Također se koriste za izradu razrađenih složenih vrsta.
typedef
Rezervirana riječ typedef koristi se za zamjenu niza tipova jednim imenom (za slijed). Sljedeći segment koda to ilustrira:
typedef unsigned long int IduIL;
IduIL myInt = 555555555555555555;cout << myInt <<'\n';
Izlaz je 555555555555555555. U kodu je IduIL postao tip koji označava "unsigned long int".
Strukturirano vezivanje
Strukturirano vezivanje značajka je koja omogućuje davanje imena podobjektima. Sljedeći kod to ilustrira za niz:
int arr [3] = 1, 2, 3;automatski [x, y, z] (arr);
cout << x <<"<< y <<"<< z <<'\n';
Izlaz je 1 2 3. Dakle, vrijednosti: 1, 2, 3 dobile su imena, x, y, z. Zabilježite upotrebu i položaj rezervirane riječi, auto. Također, imajte na umu upotrebu uglatih zagrada.
Bitno polje
Sjećanje je slijed stanica. Svaka stanica uzima bajt. Također, svaki se bajt sastoji od osam bitova. Skupina bitova, ne nužno osam bitova, može se postaviti i promijeniti. Takva se skupina naziva bit-polje. Te bi skupine ležale jedna do druge. Ako grupe neće činiti tip, recimo 16 bitova za kratki int, dodaju se bitovi za popunjavanje. Sljedeći kod to ilustrira strukturom:
struct Datumnepotpisani kratki wkDan: 3; // 3 bita
nepotpisani kratki ponedjeljak: 6; // 6 bitova
nepotpisani kratki pon: 5; // 5 bitova
nepotpisano kratko god: 8; // 8 bitova za dvoznamenkastu godinu
dte;
dte.wkDan = 1; dte.ponedjeljak = 2; dte.pon = 2; dte.god = 21;
cout << dte.mon <<'/'<< dte.monDay <<'/'<< dte.yr <<'\n';
Izlaz je: 2/2/21. Ukupan broj bitova za wkDay, MonDay i mon je 3 + 6 + 5 = 14. Dakle, dodala bi se dva bita za popunjavanje da bi se dobilo 16 bitova za kratki cijeli broj od 2 bajta (16 bita). Sljedećih 8 bitova započinje sljedeći kratki int, koji se zatim popunjava s 8 bita za popunjavanje.
Napomena: Izbjegavajte upotrebu bit-polja; koristiti ga samo za istraživanje.
Prostor imena
Prostor imena je skup imena koji se ne smije sukobljavati s istim imenima ostalih skupova imena. Sljedeći program ilustrira upotrebu istih imena iz dva različita imenska prostora, primijenjena u prostoru imena main () funkcije:
#includepomoću prostora imena std;
prostor imena NS1
int myInt = 8;
float flt;
prostor imena 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';
return 0;
Izlaz je:
9
8
2.5
4.8
U kodu se nalaze dva sukobljena ista int imena i dva ista plutajuća imena.
Predložak i predložak specijalizacija
Shema predloška omogućuje upotrebu rezerviranog mjesta za različite moguće skalarne tipove. Specijalizacija je odabir određenog skalarnog tipa. Sljedeći kod to ilustrira za funkciju:
#includepomoću prostora imena std;
predložak void func (T cha, U no)
cout << "I need bread for " << cha << no << '.' << '\n';
int main ()
func ('$', 3);
return 0;
Izlaz je:
“Treba mi kruh za 3 dolara."
Paket parametara predloška
Prevoditelji još trebaju u potpunosti implementirati ovu značajku - pogledajte kasnije.
Zaključak
C ++ tipovi postoje u dvije kategorije: osnovni tipovi i složeni tipovi. Osnovni tipovi su skalarni tipovi. Osnovni složeni tipovi su nizovi, nabrajanja, klase, unija, reference, pokazivači i funkcije. Ovi osnovni složeni tipovi koriste se za izradu razrađenih složenih vrsta, a to su typedef, strukturirani vezivi, bit-polja, prostor imena i značajke predloška.
Chrys