Table des matières:
- La commande C ++ goto
- L'opérateur ternaire C ++
- Types énumérés en C ++
- namespaces C ++
- Fonctions virtuelles pures en C ++
- La classe de chaînes C ++
- Héritage multiple en C ++
- Modèles C ++ et bibliothèque de templates standard
Vidéo: Linux Tutorial for Beginners: Introduction to Linux Operating System 2024
Le langage C ++ contient tellement de fonctionnalités que les programmeurs débutants ne peuvent pas tous comprendre. Heureusement, vous n'avez pas besoin de maîtriser toutes les fonctionnalités de la langue pour écrire de grands programmes dans le monde réel. Vous trouverez ci-dessous dix caractéristiques que vous voudrez peut-être anticiper, au cas où vous les verriez dans les programmes d'autres personnes.
La commande C ++ goto
Cette commande retourne à C, l'ancêtre de C ++. En principe, utiliser cette commande est facile. Vous pouvez placer goto label; où tu veux. Lorsque C ++ rencontre cette commande, le contrôle passe immédiatement à l'étiquette, comme démontré dans cet extrait de code:
for (;;) {if (expression conditionnelle) {goto outahere;} // … tout ce que vous voulez …} outahere: // … le programme continue ici …
En pratique, cependant, goto introduit beaucoup de façons de bousiller. Dans tous les cas, les programmeurs ont rapidement remarqué que les deux utilisations les plus courantes du goto consistaient à quitter les boucles et à passer au cas suivant dans une boucle. Le Comité des normes C introduit la pause et continue et a presque complètement enlevé le besoin de la commande goto.
L'opérateur ternaire C ++
L'opérateur ternaire est un opérateur unique en C et C ++. Cela fonctionne comme suit:
int n = (conditionnel)? expression1: expression2;
Le? l'opérateur évalue d'abord le conditionnel. Si la condition est vraie, alors la valeur de l'expression est égale à la valeur de expression1; sinon, il est égal à la valeur de expression2.
Par exemple, vous pouvez implémenter une fonction maximum () comme suit:
int max (int n1, int n2) {return (n1> n2)? n1: n2;}
L'opérateur ternaire peut être appliqué à n'importe quel type de numérique mais ne peut pas être surchargé. L'opérateur ternaire est vraiment une expression - pas une instruction de contrôle comme un si.
Types énumérés en C ++
L'idée simple est que vous pouvez définir des constantes et laisser C ++ leur assigner des valeurs, comme indiqué ici:
enum Colors {NOIR, BLEU, VERT, JAUNE, ROUGE}; Couleurs myColor = BLACK;
Le problème avec les types énumérés réside dans l'implémentation: Plutôt que de créer un vrai type, C ++ utilise des entiers. Dans ce cas, BLACK reçoit la valeur 0, BLUE 1, GREEN2 et ainsi de suite.
La bibliothèque standard pour C ++ 2011 a "résolu" ce problème en créant un type de classe énuméré comme indiqué dans l'extrait suivant:
enum class Colors {BLACK, BLUE, GREEN, YELLOW, RED}; Couleurs myColor = Couleurs:: BLACK;
Dans cette version, Colors est un nouveau type.Chacune des constantes, NOIR, BLEU et ainsi de suite, sont membres du type Couleurs. Vous pouvez toujours convertir un objet de la classe Colors en int, mais une distribution implicite n'est pas autorisée.
namespaces C ++
Il est possible de donner le même nom à différentes entités dans deux bibliothèques différentes. Par exemple, la fonction grade () dans la bibliothèque Student affecte probablement une note, tandis que la fonction grade () dans la bibliothèque CivilEngineering peut définir la pente sur le côté d'une colline. Pour éviter ce problème, C ++ permet au programmeur de placer son code dans un espace de noms distinct. Ainsi, la note dans l'espace de noms Student est différente de la note dans CivilEngineering.
L'espace de noms est au-dessus et au-delà du nom de la classe. La fonction membre grade () de la classe BullDozer dans l'espace de noms CivilEngineering a le nom étendu CivilEngineering:: BullDozer:: grade ().
Tous les objets et fonctions de la bibliothèque se trouvent dans l'espace de noms std. L'instruction au début du modèle de programme utilisant namespace std; dit que si vous ne voyez pas l'objet spécifié dans l'espace de nom par défaut, alors allez dans std.
Fonctions virtuelles pures en C ++
Il n'est pas nécessaire de définir une fonction déclarée virtuelle. Une telle fonction indéfinie est connue sous le nom de fonction de membre virtuel pur . À ce stade, cependant, les choses se compliquent. Par exemple, une classe avec une ou plusieurs fonctions virtuelles pures est dite abstraite et ne peut pas être utilisée pour créer un objet. Aborder ce sujet après vous sentir à l'aise avec les fonctions virtuelles et la liaison tardive.
La classe de chaînes C ++
La plupart des langues incluent une classe de chaînes en tant que type intrinsèque pour la gestion facile des chaînes de caractères. En théorie, la classe de chaîne devrait faire la même chose pour C ++. En pratique, cependant, ce n'est pas si simple. Dans la mesure où la chaîne n'est pas un type intrinsèque, les messages d'erreur générés par le compilateur en cas de problème sont plus proches de ceux associés aux classes définies par l'utilisateur. Pour un débutant, ces messages peuvent être très difficiles à interpréter.
chaîne n'est même pas une classe. C'est une instance d'une classe de template. Les messages d'erreur peuvent être à couper le souffle.
Héritage multiple en C ++
Une classe peut réellement étendre plus d'une classe de base. Cela semble simple mais peut devenir assez compliqué lorsque les deux classes de base contiennent des fonctions membres du même nom. Pire encore, lorsque les deux classes de base sont elles-mêmes des sous-classes d'une classe commune.
En fait, il y a tellement de problèmes que C ++ est le seul langage de type C qui supporte l'héritage multiple. Java et C #, les deux langages dérivés de C ++, ont décidé d'abandonner le support pour l'héritage multiple.
Modèles C ++ et bibliothèque de templates standard
Les créateurs de C ++ ont remarqué que les fonctions similaires à:
int max (int n1, int n2) {if (n1> n2) {return n1;} return n2;} double max (double n1, double n2) {if (n1> n2) {return n1;} renvoie n2;} char max (char n1, char n2) {if (n1> n2) {return n1;} return n2;}
"Ne serait-ce pas cool", dit-on à l'autre, "si vous pouviez remplacer le type par un pseudo-type T que vous pourriez définir au moment de la compilation?"Avant que vous ne le sachiez, les presto-templates deviennent une partie du template C ++:
T max (T t1, T t2) {if (t1> t2) {return t1;} renvoie t2;}
Maintenant le programmeur peut Créez un max (int, int) en remplaçant T par int et en compilant le résultat, créez un max (double, double) en remplaçant T par double, et ainsi de suite. Le comité des normes a même publié une bibliothèque entière de classes, connue sous le nom de bibliothèque de modèles standard (STL), basée sur des classes modèles.
Pour un débutant, cependant, le sujet des classes modèles commence à être syntaxiquement très compliqué. En outre, les erreurs que le compilateur génère lorsque vous obtenez une mauvaise instanciation de modèle sont déroutantes pour un expert, sans parler d'un débutant. C'est certainement un sujet qui doit attendre jusqu'à ce que vous vous sentiez à l'aise avec la langue de base.