Spomin računalnika je vrsta celic. Vsaka celica ima velikost enega bajta, običajno je to prostor, ki ga zaseda zahodnoevropski značaj. Velikost predmeta je podana v bajtih. Ta članek vsebuje povzetek vrst C ++. Za razumevanje tega članka bi morali že imeti osnovno znanje jezika C ++.
Vsebina članka
- Temeljne vrste
- Načini konstruiranja sestavljenih tipov
- Polja
- Naštevanje
- Razred
- Unije
- Reference
- Funkcije
- Druge vrste spojin
- Zaključek
Temeljne vrste
Temeljni tipi so skalarni tipi.
bool
Logiški tip ali bool ima vrednost true ali false za 1 ali 0. True ali false zavzame en bajt.
char, nepodpisani char in podpisani char
Znak je običajno za en zahodnoevropski znak. Običajno zavzame en bajt. Obstaja tudi nepodpisan in podpisan znak, ki je vsak osem-bitno celo število. Nepodpisani znaki ne vključujejo negativnih vrednosti, medtem ko podpisani znaki vključujejo negativne vrednosti. Vrsta vrednosti, ki jo ima char, je odvisna od prevajalnika in je lahko samo nepodpisani char. Te tri vrste znakov se imenujejo ozke vrste znakov in zasedajo en bajt.
Celo število
Obstaja pet nepodpisanih standardnih celoštevilskih vrst in pet podpisanih standardnih celoštevilskih vrst. Pet neznanjenih celoštevilskih vrst je: "unsigned char", "unsigned short int", "unsigned int", "unsigned long int" in "unsigned long long int". Pet ustreznih podpisanih celoštevilskih vrst je: "podpisani znak", "kratek int", "int", "dolg int" in "dolg dolg int".
»Nepodpisani znak« je enak tipu kot tipi ozkih znakov (glej zgoraj). "Podpisani znak" je druga vrsta ozkih vrst znakov (glej zgoraj).
Pri prevajalniku g ++ »unsigned char« ali »signed char« zavzame en bajt; "Unsigned short int" ali "short int" zavzame dva bajta; "Unsigned int" ali "int" zavzame štiri bajte; "Unsigned long int" ali "long int" zaseda 8 bajtov; "Unsigned long long int" ali "long long int" še vedno zaseda 8 bajtov (od zdaj).
char16_t, char32_t, wchar_t
Ko imamo opravka z zahodnoevropskimi liki, je vrsta char v mnogih situacijah dovolj. Vendar pa je za sporazumevanje s kitajščino in drugimi vzhodnimi jeziki potreben char16_t ali char32_t ali wchar_t. Pri prevajalniku g ++ char16_t zaseda dva bajta; char32_t zavzema štiri bajte, wchar_t pa tudi štiri bajte.
Bool, char, char16_t, char32_t, wchar_t, podpisani in nepodpisani celoštevilni tipi tvorijo drug niz, imenovan integralni (celoštevilski).
Na tej točki v članku sta bila omenjena dva skupna tipa: tipi ozkih znakov in integralni tipi.
Vrste s plavajočo vejico
Predpostavimo, da sta števili 457.000 in 457.230 enaki odčitki, merjeni z dvema različnima merilnima instrumentoma. 457.230 je natančnejši od 457.000, ker je vrednost bolj podrobna (vključuje manjša mesta: + 200 plus 30). Število s plavajočo vejico je število z delnim (decimalnim) delom. Čeprav so številke v računalniku zaporedje bitov, so nekatere številke s plavajočo vejico natančnejše od drugih.
Nekateri merilni instrumenti izvajajo meritve v minimalnih korakih, recimo 10 enot. Tak instrument bi imel naslednje odčitke: 10, 20, 30, 40,… 100, 110, 130, 140,… 200, 210, 220, 230, 240 itd. Čeprav so številke v računalniku zaporedje bitov, se števila s plavajočo vejico gibljejo v nekaj minimalnih korakih (veliko manj kot 10 enot).
C ++ ima tri vrste s plavajočo vejico, in sicer: float, double in long double. Za vsak prevajalnik mora imeti dvojnik natančnost, ki je višja od natančnosti float ali vsaj float; dolgi dvojnik mora imeti natančnost, ki je višja od natančnosti dvojne ali vsaj dvojne.
Obstaja tretje skupno ime: aritmetični tip. To je ime za integralne in vrste s plavajočo vejico. Upoštevajte, da je to tudi ime za vse skalarne tipe, kot smo že pojasnili.
Pri prevajalniku g ++ je število bajtov za float štiri; število bajtov za dvojnico je osem; število bajtov za dolg dvojnik je šestnajst.
void Type
Pri prevajalniku g ++ je velikost tipa void en bajt. Bajt uradno nima bitov, kar pomeni, da ima njegova lokacija prazno vsebino.
Načini konstruiranja sestavljenih tipov
Sestavljeni tipi niso temeljni tipi. To pomeni, da so sestavljene vrste neskalarne vrste. V tem poglavju so razložene osnove sestavljenih vrst.
Polja
Naslednji kodni segment prikazuje vrsto intov in vrsto znakov:
int arrInt [] = 1, 2, 3, 4, 5;char arrCha [] = 'a', 'b', 'c', 'd', 'e';
cout << arrInt[2] <<" <
Naštevanje
Naštevanje je vrsta z imenovanimi konstantami. Upoštevajte naslednji segment kode:
enum a = 3, b, c;cout << b <<'\n';
Rezultat je: 4. Prva vrstica segmenta kode je oštevilčenje, a, b ali c pa števec.
Razred
Razred je posplošena enota, iz katere je mogoče ustvariti (primeriti) številne predmete iste posplošene enote. Naslednji program prikazuje razred in dva predmeta, izdelana iz njega. Takšen objekt se razlikuje od skalarnega predmeta.
#includeuporaba imenskega prostora std;
razred TheCla
javno:
int števil = 5;
int fn ()
vrnitev številka;
;
int main ()
TheCla obj1;
TheCla obj2;
cout << obj1.num << " << obj2.num <<'\n';
vrnitev 0;
Izhod je: 5 5. Ime razreda je TheCla, imeni obeh predmetov pa sta obj1 in obj2. Zapiši podpičje tik za opisom (definicijo) razreda. Upoštevajte, kako sta bila primera postavljena v funkciji main ().
Opomba: num je podatkovni član, fn pa je funkcija člana.
Unije
strukt
Struktura je kot matrika, vendar namesto parov indeks / vrednost ima pare ime / vrednost. Imena so lahko zapisana v poljubnem vrstnem redu. Naslednji program prikazuje strukturo in njeno uporabo:
#includeuporaba imenskega prostora std;
struct TheCla
int števil = 5;
float flt = 2.3;
char ch = 'a';
obj1, obj2;
int main ()
cout << obj2.num <<", "<< obj2.flt <<", "<< obj2.ch <<'\n';
vrnitev 0;
Rezultat je:
5, 2.3, a
Ime strukture je TheCla. obj1 in obj2 sta dva različna predmeta strukture.
Unije
Naslednji program prikazuje zvezo in njeno uporabo:
#includeuporaba imenskega prostora std;
zveza TheCla
int številka;
float flt = 2.3;
char ch;
obj1, obj2;
int main ()
cout << obj2.flt <<'\n';
vrnitev 0;
Rezultat je: 2.3. Zveza je podobna strukturi. Glavna razlika med struct in unionom je v tem, da ima lahko za strukturo vrednost (inicializirano) naenkrat samo en član hkrati. V zgornjem programu ima član flt vrednost 2.3. Vsak od ostalih članov, num ali ch, ima lahko naslednjo vrednost le, če je vrednost za flt opuščena.
Reference
Referenca je sinonim za identifikator. Naslednji segment kode prikazuje, kako pridobiti sklic na identifikator:
int id = 5;int & ref1 = id;
int & ref2 = id;
cout << id << " << ref1 << " << ref2 <<'\n';
Izhod je: 5 5 5. ref1 in ref2 sta sopomenki za id.
referenca lvalue in referenca rvalue
Zgornje reference so referenčne vrednosti. Naslednja koda prikazuje sklic rvalue:
int && ref = 5;cout << ref <<'\n';
Rezultat je: 5. Ta sklic je ustvarjen, ne da bi se v pomnilniku ugotovila lokacija. Da bi to dosegli, je potreben dvojni &, tj.e., &&.
Kazalec
Kazalec v resnici ni entiteta C ++. Vendar pa ponuja boljšo shemo za obravnavanje referenc. Naslednja koda prikazuje, kako je mogoče ustvariti kazalec:
int ptdId = 5;int ptdId = 5;
int * ptrId;
ptrId = &ptdId;
cout << *ptrId <<'\n';
Rezultat je: 5. Upoštevajte razliko v imenu med ptdId in ptdId. ptdId je koničasti objekt, ptrId pa kazalec. & ptdId vrne naslov usmerjenega predmeta, ki je dodeljen ptrId. Če želite vrniti vrednost koničastega predmeta, uporabite * ptrId.
Funkcije
Osnovna funkcija in njen klic
Naslednja koda prikazuje osnovno definicijo funkcije in njen klic:
#includeuporaba imenskega prostora std;
int fn (int številka)
cout<<"seen"<<'\n';
vrnitev številka;
int main ()
int ret = fn (5);
cout << ret <<'\n';
vrnitev 0;
Izhod je
definicija funkcije
5
Klic funkcije je fn (5). Ime funkcije je fn.
Sklic in kazalec na funkcijo
& fn vrne naslov v pomnilnik funkcije, katere ime je fn. Naslednji stavek razglasi kazalec na funkcijo:
int (* func) ();Tu je func ime kazalca na funkcijo. Prvi par oklepajev razlikuje ta kazalnik funkcije od kazalca skalarnega objekta. Func lahko naredimo tako, da vsebuje naslov funkcije, označene s fn, na naslednji način:
func = &fn;Naslednji program sproži sklic na funkcijo in kazalec:
#includeuporaba imenskega prostora std;
int fn (int številka)
/ * nekaj izjav * /
vrnitev številka;
int main ()
int (* func) (int);
func = &fn;
int ret = func (5);
cout << ret <<'\n';
vrnitev 0;
Rezultat je: 5. Upoštevajte, da imata fn in func v deklaraciji vsak parameter int.
Druge vrste spojin
Zgornje osnovne sestavljene vrste so sestavljene same po sebi. Uporabljajo se tudi za izdelavo izdelanih tipov spojin.
typedef
Rezervirana beseda typedef se uporablja za zamenjavo zaporedja vrst z enim imenom (za zaporedje). To ponazarja naslednji segment kode:
typedef unsigned long int IduIL;
IduIL myInt = 555555555555555555;cout << myInt <<'\n';
Izhod je 555555555555555555. V kodi je IduIL postal tip, ki pomeni "unsigned long int".
Strukturirana vezava
Strukturirana vezava je funkcija, ki omogoča, da se podjektom dajo imena. Naslednja koda to ponazarja za matriko:
int arr [3] = 1, 2, 3;samodejno [x, y, z] (arr);
cout << x <<"<< y <<"<< z <<'\n';
Izhod je 1 2 3. Torej, vrednosti: 1, 2, 3 so dobile imena, x, y, z. Upoštevajte uporabo in položaj rezervirane besede, samodejno. Upoštevajte tudi uporabo oglatih oklepajev.
Bit-polje
Spomin je zaporedje celic. Vsaka celica vzame bajt. Prav tako je vsak bajt sestavljen iz osmih bitov. Skupino bitov, ne nujno osem bitov, je mogoče nastaviti in spremeniti. Takšna skupina se imenuje bitno polje. Te skupine bi ležale ena poleg druge. Če skupine ne bodo sestavljale tipa, recimo 16 bitov za kratek int, se dodajo dodatki. Naslednja koda to ponazarja s strukturo:
struct Datumnepodpisan kratek dan tedna: 3; // 3 bitov
nepodpisan kratek dan: 6; // 6 bitov
nepodpisana kratka pon: 5; // 5 bitov
nepodpisano kratko leto: 8; // 8 bitov za dvomestno leto
dte;
dte.wkDay = 1; dte.ponedeljek = 2; dte.pon = 2; dte.leto = 21;
cout << dte.mon <<'/'<< dte.monDay <<'/'<< dte.yr <<'\n';
Izhod je: 2/2/21. Skupno število bitov za wkDay, MonDay in mon je 3 + 6 + 5 = 14. Torej bi bila dodana dva bita za oblazinjenje, da bi sestavili 16 bitov za kratko celo število 2 bajtov (16 bitov). Naslednjih 8 bitov začne naslednji kratek int, ki se nato napolni z 8 bitovi za oblazinjenje.
Opomba: Izogibajte se uporabi bitnih polj; uporabite samo za raziskave.
Imenski prostor
Imenski prostor je nabor imen, ki ne sme biti v nasprotju z enakimi imeni drugih naborov imen. Naslednji program ponazarja uporabo istih imen iz dveh različnih imenskih prostorov, uporabljenih v imenskem prostoru funkcije main ():
#includeuporaba imenskega prostora std;
imenski prostor NS1
int myInt = 8;
float flt;
imenski 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';
vrnitev 0;
Rezultat je:
9
8
2.5
4.8
V kodi sta dve nasprotujoči si enaki imeni int in dve nasprotujoči si iskani imeni.
Predloga in specializacija za predloge
Shema predloge omogoča uporabo ograde za različne možne skalarne vrste. Specializacija je izbira določene skalarne vrste. Naslednja koda to ponazarja za funkcijo:
#includeuporaba imenskega prostora std;
predloga void func (T cha, U no)
cout << "I need bread for " << cha << no << '.' << '\n';
int main ()
func ('$', 3);
vrnitev 0;
Rezultat je:
»Kruha rabim za 3 dolarje."
Paket predlogov parametrov
Prevajalniki bodo to funkcijo še morali v celoti izvesti - glejte kasneje.
Zaključek
Tipi C ++ obstajajo v dveh kategorijah: temeljni tipi in sestavljeni tipi. Temeljni tipi so skalarni tipi. Osnovni sestavljeni tipi so nizi, oštevilčenja, razredi, združitve, sklici, kazalci in funkcije. Ti osnovni tipi sestavljenih spojev se uporabljajo za izdelavo izdelanih sestavljenih vrst, ki so typedef, strukturirane vezi, bitna polja, imenski prostor in funkcije predloge.
Chrys