Sommario:
- Il comando goto C ++
- L'operatore ternario C ++
- Tipi enumerati in C ++
- Spazi dei nomi C ++
- Pure funzioni virtuali in C ++
- La classe di stringhe C ++
- Multiple ereditarietà in C ++
- Modelli C ++ e la libreria di modelli standard
Video: Recommender Systems 2024
Il linguaggio C ++ contiene così tante funzioni che i programmatori principianti non riescono a comprenderle tutte. Fortunatamente, non è necessario padroneggiare tutte le funzionalità della lingua per scrivere programmi grandi e reali. Di seguito sono elencate dieci funzioni che potresti voler guardare avanti, nel caso in cui le vedi nei programmi di altre persone.
Il comando goto C ++
Questo comando riporta fino a C, il progenitore di C ++. In linea di principio, l'utilizzo di questo comando è facile. Puoi inserire l'etichetta goto; dovunque tu voglia. Quando C ++ incontra questo comando, il controllo passa immediatamente all'etichetta, come dimostrato in questo snippet di codice:
for (;;) {if (espressione condizionale) {goto outahere;} // … qualunque cosa tu voglia …} outahere: // … il programma continua qui …
In pratica, tuttavia, goto introduce molti modi per rovinare. In ogni caso, non ci volle molto prima che i programmatori notassero che i due usi più comuni del goto erano quelli di uscire da loop e passare al caso successivo all'interno di un ciclo. Il Comitato per gli standard C ha introdotto un'interruzione e continua e ha rimosso quasi completamente la necessità del comando goto.
L'operatore ternario C ++
L'operatore ternario è un operatore esclusivo di C e C ++. Funziona come segue:
int n = (condizionale)? espressione1: espressione2;
L'? l'operatore prima valuta il condizionale. Se la condizione è vera, il valore dell'espressione è uguale al valore di expression1; altrimenti, è uguale al valore di expression2.
Ad esempio, è possibile implementare una funzione maximum () come segue:
int max (int n1, int n2) {return (n1> n2)? n1: n2;}
L'operatore ternario può essere applicato a qualsiasi tipo di numerico ma non può essere sovraccaricato. L'operatore ternario è veramente un'espressione - non una dichiarazione di controllo come un if.
Tipi enumerati in C ++
L'idea semplice è che è possibile definire costanti e lasciare che C ++ assegni loro valori, come mostrato qui:
colori enumerazione {NERO, BLU, VERDE, GIALLO, ROSSO}; Colori myColor = BLACK;
Il problema con i tipi enumerati sta nell'implementazione: invece di creare un tipo vero, il C ++ usa interi. In questo caso, a BLACK viene assegnato il valore 0, BLUE viene assegnato 1, GREEN2 e così via.
La libreria standard 2011 per C ++ "risolve" questo problema creando un tipo di classe enumerato come mostrato nel seguente snippet:
classe enum Colori {NERO, BLU, VERDE, GIALLO, ROSSO}; Colori myColor = Colori:: NERO;
In questa versione, Colors è un nuovo tipo.Ciascuna delle costanti, NERO, BLU e così via, sono membri del tipo Colori. Puoi ancora lanciare un oggetto di classe Colors in un int, ma un cast implicito non è permesso.
Spazi dei nomi C ++
È possibile assegnare a entità diverse in due diverse librerie lo stesso nome. Ad esempio, la funzione grade () all'interno della libreria Studente probabilmente assegna un voto, mentre la funzione grade () all'interno della libreria CivilEngineering potrebbe impostare la pendenza sul lato di una collina. Per evitare questo problema, C ++ consente al programmatore di inserire il suo codice in uno spazio dei nomi separato. Pertanto il voto all'interno dello spazio dei nomi degli studenti è diverso dal grado all'interno di CivilEngineering.
Lo spazio dei nomi è sopra e oltre il nome della classe. La funzione membro grade () della classe BullDozer nel namespace CivilEngineering ha il nome esteso CivilEngineering:: BullDozer:: grade ().
Tutti gli oggetti e le funzioni della libreria si trovano nello spazio dei nomi std. La dichiarazione all'inizio del modello del programma usando namespace std; dice che se non vedi l'oggetto specificato nello spazio dei nomi predefinito, allora vai a cercare in std.
Pure funzioni virtuali in C ++
Non è necessario definire una funzione dichiarata virtuale. Tale funzione indefinita è nota come funzione membro virtuale puro . A quel punto, tuttavia, le cose si complicano. Ad esempio, una classe con una o più funzioni virtuali pure è detta astratta e non può essere utilizzata per creare un oggetto. Affronta questo argomento dopo esserti sentito a tuo agio con le funzioni virtuali e l'associazione tardiva.
La classe di stringhe C ++
La maggior parte delle lingue include una classe di stringhe come un tipo intrinseco per gestire facilmente stringhe di caratteri. In teoria, la classe della stringa dovrebbe fare lo stesso per C ++. In pratica, tuttavia, non è così semplice. Poiché la stringa non è un tipo intrinseco, i messaggi di errore generati dal compilatore quando qualcosa va storto sono più simili a quelli associati alle classi definite dall'utente. Per un principiante, questi messaggi possono essere molto difficili da interpretare.
stringa non è nemmeno una classe. È un'istanza di una classe template. I messaggi di errore possono essere mozzafiato.
Multiple ereditarietà in C ++
Una classe può effettivamente estendere più di una classe base. Sembra semplice ma può diventare piuttosto complicato quando le due classi base contengono funzioni membro con lo stesso nome. Ancora peggio è quando entrambe le classi base sono esse stesse sottoclassi di qualche classe comune.
In realtà, sorgono così tanti problemi che il C ++ è l'unico linguaggio C-like che supporta l'ereditarietà multipla. Java e C #, entrambi linguaggi derivati da C ++, hanno deciso di abbandonare il supporto per l'ereditarietà multipla.
Modelli C ++ e la libreria di modelli standard
I creatori di C ++ hanno notato come funzioni simili come la seguente sono:
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;}
"Non sarebbe bello," si dice ad un altro, "se potessi sostituire il tipo con un pseudo-tipo T che potresti definire in fase di compilazione?"Prima che tu lo sai, presto - i template diventano parte di C ++:
template T max (T t1, T t2) {if (t1> t2) {return t1;} return t2;}
Ora il programmatore può crea un massimo (int, int) sostituendo T con int e compilando il risultato, crea un massimo (doppio, doppio) sostituendo T con doppio, e così via. Lo Standards Committee ha anche rilasciato un'intera libreria di classi, nota come Standard Template Library (in breve STL), basata su classi template.
Per un principiante, tuttavia, l'argomento delle classi template inizia ad essere sintatticamente molto complicato. Inoltre, gli errori che genera il compilatore quando si ottiene un errore di istanza del modello sono sconcertanti per un esperto, non importa un principiante. Questo è sicuramente un argomento che deve aspettare fino a quando non ti senti a tuo agio con il linguaggio di base.