C ++

C ++ typer

C ++ typer
En C ++ -enhet er en verdi, objekt, referanse, funksjon, teller, type, klassemedlem, bitfelt, strukturert binding, navneområde, mal, malspesialisering eller parameterpakke. En enhet kan være av en eller flere typer. Det er to kategorier av C ++ typer: grunnleggende og sammensatte typer. En skalar er aritmetikk eller en pekerobjektype. Grunnleggende typer er skalarer, mens resten av enhetstyper er sammensatte typer.

Minnet til en datamaskin er en serie celler. Hver celle har størrelsen på en byte, det er vanligvis plassen som har en vesteuropeisk karakter. Størrelsen på et objekt er gitt i byte. Denne artikkelen gir et sammendrag av C ++ - typer. Du bør allerede ha grunnleggende kunnskap om C ++, for å forstå denne artikkelen.

Artikkelinnhold

- Grunnleggende typer
- Måter å konstruere sammensatte typer på
- Arrays
- Oppregning
- Klasse
- Union
- Referanser
- Funksjoner
- Andre sammensatte typer
- Konklusjon

Grunnleggende typer

Grunnleggende typer er skalære typer.

bool

En boolsk type eller booltype har verdien true eller false for 1 eller 0. Sann eller usann okkuperer en byte.

røye, usignert røye og signert røye

En røye er typisk for en vesteuropeisk karakter. Det opptar vanligvis en byte. Det er også en usignert og signert røye, som hver er et åtte-biters heltall. Usignerte tegn innebærer ikke negative verdier, mens signerte tegn innebærer negative verdier. Hvilken verdi en røye har, avhenger av kompilatoren og kan bare være en usignert røye. Disse tre typene tegn kalles, smale karaktertyper, og hver har en byte.

Heltall

Det er fem usignerte standard heltallstyper og fem signerte standard heltallstyper. De fem usignerte heltallstypene er: “usignert char”, “usignert kort int”, “usignert int”, “usignert lang int” og “usignert lang int”. De fem tilsvarende signerte heltallstyper er: “signert char”, “short int”, “int”, “long int” og “long long int”.

"Usignert røye" er av samme type som de smale tegntypene (se ovenfor). "Signert røye" er den andre typen av smale tegntyper (se ovenfor).

Med g ++ kompilatoren opptar "usignert røye" eller "signert røye" en byte; “Usignert kort int” eller “kort int” opptar to byte; “Usignert int” eller “int” opptar fire byte; “Usignert lang int” eller “lang int” opptar 8 byte; “Usignert lang lang int” eller “lang lang int” opptar fortsatt 8 byte (per nå).

char16_t, char32_t, wchar_t

Når du arbeider med vesteuropeiske tegn, er røyetypen nok i mange situasjoner. Imidlertid, når du arbeider med kinesisk og andre østlige språk, er char16_t eller char32_t eller wchar_t nødvendig. Med g ++ kompilatoren tar char16_t to byte; char32_t opptar fire byte og wchar_t opptar også fire byte.

Bool, char, char16_t, char32_t, wchar_t, signert og usignerte heltalstyper, danner et annet sett, kalt integrerte (heltall) typer.

På dette punktet i artikkelen er to kollektive typer nevnt: smale karaktertyper og integrerte typer.

Flytpunkttyper

Anta at tallene 457.000 og 457.230 er den samme avlesningen, målt av to forskjellige måleinstrumenter. 457,230 er mer presis enn 457,000 fordi verdien er mer detaljert (involverer mindre steder: + 200 pluss 30). Et flytende tall er et tall med en brøk (desimal) del. Selv om tall på datamaskinen er en sekvens med biter, er noen flytende tall mer presise enn de andre.

Noen måleinstrumenter tar målinger i minimum trinn, si 10 enheter. Et slikt instrument vil ha følgende avlesninger: 10, 20, 30, 40,… 100, 110, 130, 140,… 200, 210, 220, 230, 240, og så videre. Selv om tall i datamaskinen er en sekvens av biter, varierer tall med flytende punkt i noen minimumstrinn (mye mindre enn 10 enheter).

C ++ har tre flytende punkttyper, som er: flyt, dobbelt og langt dobbelt. For enhver kompilator må dobbelt ha presisjonen som er høyere enn float eller i det minste float; lang dobbel må ha presisjonen som er høyere enn dobbel eller i det minste dobbel.

Det er et tredje samlenavn: aritmetisk type. Dette er navnet på integrerte og flytende punkttyper. Merk at dette også er navnet på alle skalartypene, som forklart så langt.

Med g ++ kompilatoren er antall byte for en flottør fire; antall byte for en dobbel er åtte; antall byte for en lang dobbel er seksten.

ugyldig Type

Med g ++ kompilatoren er størrelsen på ugyldighetstypen en byte. Byten har offisielt ingen biter, noe som betyr at plasseringen har tomt innhold.

Måter å konstruere sammensatte typer på

Sammensatte typer er ikke-grunnleggende typer. Dette betyr at sammensatte typer er ikke-skalære typer. Denne delen forklarer det grunnleggende om sammensatte typer.

Arrays

Følgende kodesegment viser en rekke ints og en rekke tegn:

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

Oppregning

En oppregning er en type, med navngitte konstanter. Vurder følgende kodesegment:

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

Utgangen er: 4. Den første linjen i kodesegmentet er en oppregning, og a, b eller c er en oppteller.

Klasse

En klasse er en generalisert enhet hvorfra mange objekter fra den samme generaliserte enheten kan opprettes (instantiert). Det følgende programmet viser en klasse og to objekter, instantiert fra den. Et slikt objekt er forskjellig fra et skalarobjekt.

#inkludere
bruker navneområde std;
klasse TheCla

offentlig:
int num = 5;
int fn ()

return num;

;
int main ()

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

Utgangen er: 5 5. Navnet på klassen er TheCla, og navnene på de to objektene er obj1 og obj2. Legg merke til semikolonet rett etter beskrivelsen (definisjonen) av klassen. Legg merke til hvordan de to objektene ble instantiert i hovedfunksjonen ().

Merk: num er et datamedlem og fn er en medlemsfunksjon.

Union

struct

En struktur er som en matrise, men i stedet for å ha indeks / verdipar, har den navn / verdipar. Navnene kan skrives i hvilken som helst rekkefølge. Følgende program viser en struktur og dens bruk:

#inkludere
bruker navneområde std;
struct TheCla

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

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

Utgangen er:

5, 2.3, a

Navnet på strukturen er TheCla. obj1 og obj2 er to forskjellige objekter av strukturen.

Union

Følgende program viser en fagforening og dens bruk:

#inkludere
bruker navneområde std;
fagforening TheCla

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

cout << obj2.flt <<'\n';
retur 0;

Utgangen er: 2.3. Forbundet ligner en struktur. Hovedforskjellen mellom en struktur og en fagforening er at bare ett medlem kan ha en verdi (initialisert) til enhver tid for en struktur. I programmet ovenfor har medlemmet flt verdien 2.3. Hvert av de andre medlemmene, num eller ch, kan bare ha en verdi neste hvis verdien for flt er oppgitt.

Referanser

En referanse er et synonym for en identifikator. Følgende kodesegment viser hvordan du får en referanse til en identifikator:

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

Utgangen er: 5 5 5. ref1 og ref2 er synonymer til id.

lvalue Reference og rvalue Reference

Ovennevnte referanser er referanseverdier. Følgende kode viser referanseverdi:

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

Utgangen er: 5. Denne referansen er opprettet uten å identifisere noe sted i minnet. For å oppnå dette, er double & nødvendig, dvs.e., &&.

Peker

En peker er egentlig ikke en C ++ -enhet. Imidlertid gir det en bedre ordning for håndtering av referanser. Følgende kode viser hvordan en peker kan opprettes:

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

Utgangen er: 5. Legg merke til forskjellen i navn mellom ptdId og ptdId. ptdId er det spisse objektet og ptrId er pekerobjektet. & ptdId returnerer adressen til det spisse objektet som er tildelt ptrId. For å returnere verdien til det spisse objektet, bruk * ptrId.

Funksjoner

Grunnleggende funksjon og dets samtale

Følgende kode viser en grunnleggende funksjonsdefinisjon og dens samtale:

#inkludere
bruker navneområde std;
int fn (int num)

cout<<"seen"<<'\n';
return num;

int main ()

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

Resultatet er

funksjonsdefinisjon

5

Funksjonsanropet er fn (5). Navnet på funksjonen er fn.

Henvisning og peker til en funksjon

& fn returnerer adressen til funksjonen som heter fn. Følgende uttalelse erklærer en peker til en funksjon:

int (* func) ();

Her er func navnet på pekeren til funksjonen. Det første parparenteset skiller denne funksjonspekeren fra en skalær objektpeker. Funksjon kan gjøres for å holde adressen til en funksjon identifisert av fn, som følger:

func = &fn;

Følgende program setter funksjonsreferanse og peker i handling:

#inkludere
bruker navneområde std;
int fn (int num)

/ * noen uttalelser * /
return num;

int main ()

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

Utgangen er: 5. Merk at både fn og func hver har int-parameteren i erklæringen.

Andre sammensatte typer

Ovennevnte grunnleggende sammensatte typer er sammensatte i seg selv. De brukes også til å konstruere utarbeidede sammensatte typer.

typedef

Typedef reservert ord brukes til å erstatte en sekvens av typer med ett navn (for sekvensen). Følgende kodesegment illustrerer dette:

typedef usignert lang int IdIL;

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

Utgangen er 555555555555555555. I koden har IduIL blitt en type som står for "usignert lang int".

Strukturert binding

Strukturert binding er en funksjon som gjør det mulig å gi navn til underobjekter. Følgende kode illustrerer dette for matrisen:

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

Utgangen er 1 2 3. Verdiene: 1, 2, 3 har fått navnene x, y, z. Legg merke til bruken og plasseringen av det reserverte ordet, auto. Vær også oppmerksom på bruken av firkantede parenteser.

Bit-felt

Minnet er en sekvens av celler. Hver celle tar en byte. Hver byte består også av åtte biter. En gruppe biter, ikke nødvendigvis åtte biter, kan settes og endres. En slik gruppe kalles bitfelt. Disse gruppene ville ligge ved siden av hverandre. Hvis gruppene ikke utgjør en type, si 16 bits for en kort int, legges polstringsbiter til. Følgende kode illustrerer dette med strukturen:

struct Dato

usignert kort ukeDag: 3; // 3 biter
usignert kort mandag: 6; // 6 biter
usignert kort man: 5; // 5 biter
usignert kort år: 8; // 8 bits for 2-sifret år
dte;
dte.wkDay = 1; dte.monDay = 2; dte.mon = 2; dte.yr = 21;
cout << dte.mon <<'/'<< dte.monDay <<'/'<< dte.yr <<'\n';

Utgangen er: 2/2/21. Totalt antall biter for wkDay, MonDay og mon er 3 + 6 + 5 = 14. Så, to polstringsbiter vil bli lagt til for å utgjøre 16 bits for det korte heltallet på 2 byte (16 bits). De neste 8 bitene begynner med neste korte int, som deretter fylles opp med 8 polstringsbiter.

Merk: Unngå å bruke bitfelt; bruk den bare til forskning.

Navneplass

Et navneområde er et sett med navn som ikke skal komme i konflikt med de samme navnene på andre navnesett. Følgende program illustrerer bruken av de samme navnene fra to forskjellige navneområder, brukt i hovedområdet () -funksjonens navneområde:

#inkludere
bruker navneområde std;
navnerom NS1

int myInt = 8;
flyte flt;

navnerom NS2

int myInt = 9;
flyte 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';
retur 0;

Utgangen er:

9

8

2.5

4.8

Det er to motstridende samme int-navn og to motstridende samme float-navn i koden.

Mal og mal spesialisering

Malskjemaet tillater bruk av en plassholder for forskjellige mulige skalartyper. Spesialisering er å velge en bestemt skalartype. Følgende kode illustrerer dette for en funksjon:

#inkludere
bruker navneområde std;
mal ugyldig funksjon (T cha, U nei)

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

int main ()

func ('$', 3);
retur 0;

Utgangen er:

“Jeg trenger brød for $ 3.”

Malparameterpakke

Kompilatorer skal fortsatt implementere denne funksjonen - se senere.

Konklusjon

C ++ typer finnes i to kategorier: grunnleggende typer og sammensatte typer. Grunnleggende typer er skalære typer. Grunnleggende sammensatte typer er matriser, oppregninger, klasser, fagforeninger, referanser, pekere og funksjoner. Disse grunnleggende sammensatte typene brukes til å konstruere utarbeidede sammensatte typer, som er typedef, strukturerte bindinger, bitfelt, navneområde og malfunksjoner.

Chrys

Mus Hvordan endre musepekeren og markørstørrelse, farge og skjema på Windows 10
Hvordan endre musepekeren og markørstørrelse, farge og skjema på Windows 10
Musepekeren og markøren i Windows 10 er veldig viktige aspekter ved operativsystemet. Dette kan sies også for andre operativsystemer, så i sannhet er ...
Gratis og åpen kildekode-spillmotorer for utvikling av Linux-spill
Denne artikkelen vil dekke en liste over gratis og open source-spillmotorer som kan brukes til å utvikle 2D- og 3D-spill på Linux. Det er mange slike ...
Shadow of the Tomb Raider for Linux Tutorial
Shadow of the Tomb Raider er det tolvte tilskuddet til Tomb Raider-serien - et action-eventyrspill-franchise opprettet av Eidos Montreal. Spillet ble ...