Innholdsfortegnelse:
- C ++ goto-kommandoen
- C ++ ternær operatør
- Opptatte typer i C ++
- C ++ navneområder
- Pure virtuelle funksjoner i C ++
- C ++-strengeklassen
- Flere arv i C ++
- C + + -maler og Standardmallabiblioteket
Video: Kurs C++ odc. 8: Łańcuchy. Typ string. Tablice char. Tabela ASCII 2025
C ++-språket inneholder så mange funksjoner som begynnelsen programmerere ikke muligens kan forstå hver enkelt. Heldigvis trenger du ikke å mestre alle funksjonene i språket for å kunne skrive store, virkelige programmer. Følgende er ti funksjoner som du kanskje vil se fremover på, bare hvis du ser dem i andres programmer.
C ++ goto-kommandoen
Denne kommandoen går helt tilbake til C, stammen til C ++. I prinsippet er det enkelt å bruke denne kommandoen. Du kan plassere goto label; hvor enn du vil. Når C ++ kommer over denne kommandoen, sendes kontrollen umiddelbart til etiketten, som vist i denne kodestykket:
for (;;) {hvis (betinget uttrykk) {goto outahere;} // … uansett hva du vil …} outahere: // … programmet fortsetter her …
I praksis, goto introduserer mange måter å skru opp. I hvert fall tok det ikke lang tid før programmører la merke til at de to vanligste bruken av goto var å gå ut av looper og å gå til neste sak i en loop. C-standarden kom inn for å bryte og fortsette og fjernet nesten behovet for goto-kommandoen.
C ++ ternær operatør
Den ternære operatøren er en operatør som er unik for C og C ++. Det fungerer som følger:
int n = (betinget)? uttrykk1: uttrykk2;
The? Operatøren vurderer først betinget. Hvis tilstanden er sant, er verdien av uttrykket lik verdien av uttrykket1; ellers er det lik verdien av uttrykket2.
For eksempel kan du implementere en maksimum () -funksjon som følger:
int max (int n1, int n2) {retur (n1> n2)? n1: n2;}
Den ternære operatøren kan brukes på alle typer numeriske men kan ikke overbelastes. Den ternære operatøren er virkelig et uttrykk - ikke en kontrollerklæring som en hvis.
Opptatte typer i C ++
Den enkle ideen er at du kan definere konstanter og la C ++ tildele dem verdier, som vist her:
enum Farger {SVART, BLÅ, GRØN, GUL, RØD}; Farger myColor = SVART;
Problemet med oppnådde typer ligger i implementeringen: I stedet for å opprette en sann type bruker C ++ heltall. I dette tilfellet er BLACK tildelt verdien 0, BLUE er tildelt 1, GREEN2, og så videre.
Standardbiblioteket for C ++ for 2011 "fikser" dette problemet ved å opprette en opptatt klassetype som vist i følgende kode:
enum klasse Farger {SVART, BLÅ, GRØN, GUL, RØD}; Farger myColor = Farger:: SVART;
I denne versjonen er farger en ny type.Hver av konstantene, BLACK, BLUE, og så videre, er medlemmer av typen Colors. Du kan fortsatt kaste et objekt av klassefarger inn i en int, men en implisitt gjengivelse er ikke tillatt.
C ++ navneområder
Det er mulig å gi forskjellige enheter i to forskjellige biblioteker samme navn. For eksempel gir karakteren () -funksjonen i Studentbiblioteket sannsynligvis karakter, mens karakteren () i Civil Engineering-biblioteket kan sette bakken på siden av en bakke. For å unngå dette problemet, lar C ++ programmøren legge sin kode i et eget navneområde. Dermed er karakteren i Studentens navneområde forskjellig fra karakteren innen Civil Engineering.
Navneområdet er utover klassenavnet. Klassen () medlemsfunksjonen til klassen BullDozer i Civil Engineer namespace har det utvidede navnet Civil Engineer:: BullDozer:: grade ().
Alle bibliotekets objekter og funksjoner er i navneområdet std. Oppgaven i begynnelsen av programmalen bruker navneområde std; sier at hvis du ikke ser det angitte objektet i standard navnerom, så gå og se i std.
Pure virtuelle funksjoner i C ++
Du trenger ikke å definere en funksjon som er deklarert virtuell. En slik udefinert funksjon er kjent som en ren virtuell medlemsfunksjon . På det tidspunktet blir det imidlertid komplisert. For eksempel sies en klasse med en eller flere rene virtuelle funksjoner abstrakt og kan ikke brukes til å skape et objekt. Takle dette emnet etter at du har det godt med virtuelle funksjoner og sen binding.
C ++-strengeklassen
De fleste språk inkluderer en strengklasse som en egen type for lett å håndtere tekststrenger. I teorien bør strengklassen gjøre det samme for C ++. I praksis er det imidlertid ikke så enkelt. Fordi streng ikke er en egen type, er feilmeldingene som kompilatoren genererer når noe går galt, mer som de som er knyttet til brukerdefinerte klasser. For en nybegynner kan disse meldingene være svært vanskelig å tolke.
streng er ikke engang en klasse. Det er en forekomst av en maleklasse. Feilmeldingene kan være fantastisk.
Flere arv i C ++
En klasse kan faktisk utvide mer enn en grunnklasse. Dette høres enkelt, men kan bli ganske komplisert når de to grunnklassene inneholder medlemsfunksjoner med samme navn. Enda verre er når begge grunnklassene selv er underklasser av noen vanlig klasse.
Faktisk oppstår så mange problemer at C ++ er det eneste C-lignende språket som støtter flere arv. Java og C #, begge språkene avledet fra C ++, bestemte seg for å slippe støtte for flere arv.
C + + -maler og Standardmallabiblioteket
Skaperne av C ++ la merke til hvordan lignende funksjoner som følgende er:
int max (int n1, int n2) {if (n1> n2) {return n1;} return n2;} double max (double n1, double n2) {if (n1> n2) {return n1;} retur n2;} char max (char n1, char n2) {hvis (n1> n2) {return n1;} returnere n2;}
"Ville det ikke være kult," sier en til en annen, "hvis du kunne erstatte typen med en pseudotype T som du kunne definere på kompileringstidspunktet?"Før du vet det, blir presto-maler en del av C ++:
mal T max (T t1, T t2) {if (t1> t2) {return t1;} return t2;}
Nå kan programmereren lage en maks (int, int) ved å erstatte T med int og kompilere resultatet, opprett en maks (dobbelt, dobbel) ved å erstatte T med dobbel og så videre. Standardskomiteen ga til og med ut et helt bibliotek av klasser, kjent som Standard Template Library (STL for kort), basert på malklasser.
For en nybegynner begynner emnet for malklasser å bli syntactically svært komplisert. I tillegg er feilene som kompilatoren genererer når du får en mal-instansering feil, forvirrende for en ekspert, ikke bry deg om en nybegynner. Dette er definitivt et emne som må vente til du føler deg komfortabel med grunnleggende språket.
