Inhoudsopgave:
- Het commando C ++ goto
- De C ++ ternaire operator
- Opsommingstypen in C ++
- C ++ naamruimten
- Pure virtuele functies in C ++
- De tekenreeks C ++
- Meerdere overerving in C ++
- C ++ -sjablonen en de standaard sjabloonbibliotheek
Video: Features Of C++ | Machine Independent But Not Platform Independent 2024
De C ++ taal bevat zoveel functies dat beginnende programmeurs onmogelijk iedereen kunnen begrijpen. Gelukkig hoef je niet alle functies van de taal onder de knie te krijgen om grote, realistische programma's te schrijven. Hieronder volgen tien functies waar je misschien naar vooruit wilt kijken, voor het geval je ze in programma's van andere mensen ziet.
Het commando C ++ goto
Dit commando gaat helemaal terug naar C, de voorloper van C ++. In principe is het gebruik van dit commando eenvoudig. Je kunt een goto-label plaatsen; Waar je maar wilt. Wanneer C ++ dit commando tegenkomt, gaat de besturing onmiddellijk over naar het label, zoals aangetoond in dit codefragment:
voor (;;) {if (voorwaardelijke uitdrukking) {ga naar buiten;} // … wat je maar wilt …} outehere: // … programma gaat hier verder …
In de praktijk echter goto introduceert veel manieren om het te verknallen. Hoe dan ook, het duurde niet lang voordat programmeurs opmerkten dat de twee meest voorkomende toepassingen van de goto waren om lussen te verlaten en naar het volgende geval binnen een lus te gaan. Het C Standards Committee introduceerde pauze en ging door en bijna volledig de noodzaak van het goto commando weggenomen.
De C ++ ternaire operator
De ternaire operator is een operator die uniek is voor C en C ++. Het werkt als volgt:
int n = (voorwaardelijk)? expression1: expression2;
The? operator evalueert eerst het voorwaardelijke. Als de voorwaarde waar is, is de waarde van de uitdrukking gelijk aan de waarde van expression1; anders is het gelijk aan de waarde van expression2.
U zou bijvoorbeeld een maximum () -functie als volgt kunnen implementeren:
int max (int n1, int n2) {return (n1> n2)? n1: n2;}
De ternaire operator kan op elk type numeriek worden toegepast, maar kan niet worden overbelast. De ternaire operator is echt een uitdrukking - geen controleverklaring zoals een als.
Opsommingstypen in C ++
Het eenvoudige idee is dat u constanten kunt definiëren en C ++ hieraan waarden kunt toewijzen, zoals hier wordt weergegeven:
enum Kleuren {ZWART, BLAUW, GROEN, GEEL, ROOD}; Kleuren myColor = ZWART;
Het probleem met opgesomde typen ligt in de implementatie: in plaats van een echt type te maken, gebruikt C ++ gehele getallen. In dit geval krijgt BLACK de waarde 0, BLUE is 1, GREEN2, enzovoort toegewezen.
In de standaardbibliotheek van 2011 voor C ++ is dit probleem "verholpen" door een opgesomd klassetype te maken, zoals weergegeven in het volgende fragment:
klassen met enumklasse {BLACK, BLUE, GREEN, YELLOW, RED}; Kleuren myColor = Kleuren:: ZWART;
In deze versie is Colors een nieuw type.Elk van de constanten, BLACK, BLUE, enzovoort, zijn leden van het type Colors. Je kunt nog steeds een object van klasse Colors in een int casten, maar een impliciete cast is niet toegestaan.
C ++ naamruimten
Het is mogelijk om verschillende entiteiten in twee verschillende bibliotheken dezelfde naam te geven. De grade () -functie binnen de bibliotheek Student kent bijvoorbeeld waarschijnlijk een cijfer toe, terwijl de functie grade () binnen de CivilEngineering-bibliotheek de helling aan de zijkant van een heuvel kan instellen. Om dit probleem te voorkomen, staat C ++ toe dat de programmeur haar code in een aparte naamruimte plaatst. De rang binnen de namespace van de student is dus anders dan de rang binnen CivilEngineering.
De naamruimte is hoger dan de klassenaam. De grade () lidfunctie van de klasse BullDozer in de naamruimte CivilEngineering heeft de uitgebreide naam CivilEngineering:: BullDozer:: grade ().
Alle bibliotheekobjecten en -functies bevinden zich in de namespace-standaard. De instructie aan het begin van de programmasjabloon met behulp van naamruimte std; zegt dat als je het opgegeven object niet ziet in de standaard naamruimte, ga dan in std kijken.
Pure virtuele functies in C ++
U hoeft geen functie te definiëren die virtueel wordt verklaard. Een dergelijke ongedefinieerde functie staat bekend als een pure virtuele led-functie . Op dat moment wordt het echter ingewikkeld. Een klasse met een of meer pure virtuele functies is bijvoorbeeld abstract en kan niet worden gebruikt om een object te maken. Taak dit onderwerp aan nadat u zich op uw gemak voelt met virtuele functies en late binding.
De tekenreeks C ++
De meeste talen bevatten een tekenreeks als intrinsiek voor het eenvoudig verwerken van tekenreeksen. In theorie zou de stringklasse hetzelfde moeten doen voor C ++. In de praktijk is het echter niet zo eenvoudig. Omdat tekenreeks geen intrinsiek type is, lijken de foutmeldingen die de compiler genereert als er iets misgaat meer op die van gebruikersgedefinieerde klassen. Voor een beginner kunnen deze berichten erg moeilijk te interpreteren zijn.
tekenreeks is zelfs geen klasse. Het is een instantie van een sjabloonklasse. De foutmeldingen kunnen adembenemend zijn.
Meerdere overerving in C ++
Eén klasse kan in feite meer dan één basisklasse uitbreiden. Dit klinkt eenvoudig, maar kan behoorlijk ingewikkeld worden als de twee basisklassen lidfuncties met dezelfde naam bevatten. Erger is wanneer beide basisklassen zelf subklassen zijn van een of andere gemeenschappelijke klasse.
In feite doen zich zoveel problemen voor dat C ++ de enige C-achtige taal is die meerdere overerving ondersteunt. Java en C #, beide talen afgeleid van C ++, besloten om de ondersteuning voor meerdere overerving te beëindigen.
C ++ -sjablonen en de standaard sjabloonbibliotheek
De makers van C ++ merkten op dat vergelijkbare functies zoals de volgende zijn:
int max (int n1, int n2) {if (n1> n2) {return n1;} return n2;} double max (double n1, double n2) {if (n1> n2) {return n1;} return n2;} char max (char n1, char n2) {if (n1> n2) {return n1;} return n2;}
"Zou het niet cool zijn," zegt de een tegen de ander, "als je het type zou kunnen vervangen door een pseudo-type T die je tijdens het compileren zou kunnen definiëren?"Voor je het weet, presto - sjablonen worden onderdeel van C ++:
template T max (T t1, T t2) {if (t1> t2) {return t1;} return t2;}
Nu kan de programmeur maak een max (int, int) door T te vervangen door int en het resultaat te compileren, maak een max (dubbel, dubbel) door T te vervangen door double, enzovoort. Het Standards Committee heeft zelfs een hele bibliotheek met klassen uitgebracht, bekend als de standaard sjabloonbibliotheek (kortweg STL), op basis van sjabloonklassen.
Voor een beginner begint het onderwerp van de sjabloonklassen echter syntactisch erg ingewikkeld te worden. Bovendien zijn de fouten die de compiler genereert wanneer u een sjabloontoewijzing verkeerd krijgt, verwarrend voor een expert, laat staan een beginner. Dit is absoluut een onderwerp dat moet wachten tot je je op je gemak voelt met de basistaal.