Accueil Finances personnelles ÉNumérations fortement typées en C ++ - les mannequins

ÉNumérations fortement typées en C ++ - les mannequins

Vidéo: Tutoriel C++ - énumérations fortement typées 2025

Vidéo: Tutoriel C++ - énumérations fortement typées 2025
Anonim

La programmation est une question de lisibilité. Il est difficile (en fait c'est impossible) d'écrire et de maintenir un programme que vous ne pouvez pas lire. Une partie de la lecture d'une liste de codes source consiste à comprendre ce que les chiffres utilisés dans le programme représentent. L'aide la plus élémentaire que fournit C ++ est l'omniprésente #define, comme dans l'exemple souvent cité:

#define PI 3. 141592653589793

Cette solution est acceptable pour les valeurs individuelles, bien qu'elle souffre du fait que le Le mécanisme #define n'est pas (strictement parlant) une partie de C / C ++ puisque le préprocesseur s'exécute avant le compilateur. En réponse à cela, C ++ 2011 a introduit une construction expression constante :

constexpr long double PI = 3. 141592653589793;

Le mot-clé constexpr introduit des constantes dans la tente C ++. Ce PI a un type réel, comme les autres variables C ++. C ++ peut générer des messages d'erreur avec PI qui ont beaucoup plus de sens que ceux impliquant 3. 14159.

Les expressions constantes conviennent aux valeurs constantes individuelles, mais souvent les constantes représentent des ensembles de choses plutôt que des constantes naturelles, comme dans l'exemple suivant:

#define DC_OR_TERRITORY 0 #define ALABAMA 1 #define ALASKA 2 #define ARKANSAS 3 // … et ainsi de suite …

On peut supposer que ces constantes sont utilisées pour identifier les états, peut-être utilisés comme un index dans un tableau d'objets d'état ou en tant que valeur dans une base de données quelque part.

C ++ a longtemps eu un mécanisme amélioré pour définir ces types de constantes - l'énumération:

enum STATE {DC_OR_TERRITORY, // obtient 0 ALABAMA, // obtient 1 ALASKA, // obtient 2 ARKANSAS, // … et bientôt…};

Le mot-clé enum introduit une séquence de constantes appelée "énumération". Dans ce cas, l'énumération porte le nom STATE. Chaque élément de cette énumération reçoit une valeur commençant à 0 et augmentant séquentiellement de 1, donc DC_OR_TERRITORY est défini comme 0, ALABAMA est défini sur 1, et ainsi de suite. Vous pouvez remplacer ce séquençage incrémental en utilisant une instruction assign comme suit:

enum STATE {DC, TERRITOIRE = 0, ALABAMA, ALASKA, // … et ainsi de suite …};

Cette version de STATE définit un élément DC, qui reçoit la valeur 0. Il définit ensuite un nouvel élément TERRITORY, auquel est également affectée la valeur 0. ALABAMA décroche avec 1, comme précédemment.

En pratique, le programmeur peut utiliser des énumérations pour écrire du code très lisible comme:

double taxRate (STATE s) {return taxRatesByState [s];}

Le seul problème de cette approche est que cette énumération ne crée pas un nouveau type (comme vous pourriez le penser).En fait, selon la norme, STATE est juste un autre nom pour int - et les constantes ALABAMA, ALASKA, et ainsi de suite sont tous de type const int.

Le compilateur gcc fournit réellement une énumération déclarée de cette manière un peu plus d'autorité que de simplement l'appeler une autre forme de int. Vous pouvez réellement surcharger des fonctions basées sur un type enum:

void fn (STATE s); void fn (int n); fn (ALASKA); // appelle fn (STATE)

La norme 2011 permet au programmeur de créer un type complètement nouveau en utilisant le mot-clé enum. Les créateurs de la nouvelle norme ne voulant pas casser le code existant, la norme requiert l'ajout d'un mot-clé supplémentaire pour définir un type d'énumération, comme dans l'exemple suivant:

enum class ETAT {DC, TERRITOIRE = 0, ALABAMA, ALASKA, // … et ainsi de suite …};

Une classe d'énumération est maintenant un type à échelle réelle comme toute autre classe définie par l'utilisateur. Ce qui suit n'est même plus légal pour deux raisons:

int s = ALASKA;

Premièrement, la constante ALASKA n'est définie que dans l'espace de noms STATE. Ainsi, le nom de la constante est STATE:: ALASKA. Deuxièmement, le type n'est pas int mais STATE. Vous ne pouvez pas affecter une valeur de type STATE à un int.

ETAT s = ETAT:: ALASKA;

Le programmeur peut transformer un STATE en un int mais il doit le faire explicitement - les conversions implicites ne le coupent pas avec les classes d'énumération:

int n = (int) STATE:: ALASKA;

Ce nouveau type d'énumération peut également être basé sur l'un des autres types de nombres compteurs sauf int:

enum class STATE: char {DC, // … le reste de la déclaration est identique
ÉNumérations fortement typées en C ++ - les mannequins

Le choix des éditeurs

Pour les seniors: Comment travailler avec Windows dans Microsoft Windows - les nuls

Pour les seniors: Comment travailler avec Windows dans Microsoft Windows - les nuls

Windows, avec un W majuscule, tire son nom de sa caractéristique principale: Windows, avec un w minuscule. Se familiariser avec Windows signifie apprendre à ouvrir, fermer, redimensionner, déplacer et basculer entre les fenêtres, ce qui est la clé pour jongler avec succès avec plusieurs activités. Chaque programme que vous exécutez occupe sa propre fenêtre. Une fenêtre peut occuper une partie de ...

Comment accepter ou rejeter les cookies dans Safari - dummies

Comment accepter ou rejeter les cookies dans Safari - dummies

Un cookie est un petit fichier qu'un site Web enregistre automatiquement sur le disque dur de votre Mac. Il contient des informations, telles que vos préférences ou votre date de naissance, que le site utilisera lors de vos prochaines visites. Dans Mac OS X Snow Leopard, Safari vous permet de choisir d'accepter ou non tous les cookies ...

Le choix des éditeurs

Construire des boîtes et des lignes Bézier dans QuarkXPress - des nuls

Construire des boîtes et des lignes Bézier dans QuarkXPress - des nuls

Pour créer une boîte ou une ligne dans QuarkXPress plus complexe qu'un simple rectangle, ovale ou starburst, vous entrez dans le domaine du chemin de Bézier. Si vous avez utilisé l'outil Plume dans Adobe Illustrator ou Photoshop, vous comprenez déjà les chemins de Bézier. Il faut un peu de pratique et un esprit détendu ...

Création d'un rapport avec Crystal Reports 10 - témoins

Création d'un rapport avec Crystal Reports 10 - témoins

Lorsque vous démarrez Crystal Reports 10, généralement l'une des trois choses suivantes: créer un rapport, modifier un rapport ou exécuter un rapport sur les données de votre base de données. Les rapports prennent des données à partir d'une base de données, les traitent, les formatent et les affichent ensuite sur une imprimante, un écran d'ordinateur ou un site Web. Crystal Reports ...

Traitant des commentaires Javadoc dans Eclipse - mannequins

Traitant des commentaires Javadoc dans Eclipse - mannequins

Lorsque vous utilisez Eclipse pour écrire du code Java, n'oubliez pas de éditez les commentaires de Javadoc (les choses qui commencent par / **). Vous pouvez ajouter des informations utiles lorsque vous modifiez les commentaires Javadoc et lorsque vous les modifiez, l'aide au code d'Eclipse propose des suggestions. N'oubliez pas ces astuces lorsque vous modifiez vos commentaires Javadoc: Ajouter un commentaire Javadoc: ...

Le choix des éditeurs

Les connexions cachées sur le Nikon D5600 - les nuls

Les connexions cachées sur le Nikon D5600 - les nuls

Ouvrent les couvercles sur les côtés gauche et droit du Nikon D5600 caméra, et vous verrez plusieurs ports de connexions cachées. Les ports de connexion suivants sont indiqués sur cette image: Terminal d'accessoires: ce terminal accepte les accessoires suivants: câble déclencheur à distance Nikon MC-DC2; Télécommandes sans fil WR-1 et WR-R10; et les unités GPS GP-1 / GP-1A. I ...

Les connexions cachées sur votre Nikon D5200 - les nuls

Les connexions cachées sur votre Nikon D5200 - les nuls

ÉParpillés sur l'extérieur de votre appareil photo sont nombreuses commandes que vous utilisez pour changer d'image -prend des paramètres, revoir et modifier vos photos, et effectuer diverses autres opérations. Caché sous le couvercle sur le côté gauche de la caméra, vous trouverez les quatre ports de connexion suivants, étiquetés dans cette figure: Borne accessoire: Vous pouvez brancher le Nikon en option ...

Des boutons et autres commandes du Nikon D7500 - mannequins

Des boutons et autres commandes du Nikon D7500 - mannequins

C'est génial d'avoir une carte pour le boutons et commandes sur votre appareil photo, mais ce n'est pas beaucoup d'aide si vous ne pouvez pas vous rappeler quel bouton appuyer sur quand (et pourquoi). Alors, voici un aperçu des fonctions des contrôles les plus importants. (Certains contrôles ont des fonctions supplémentaires pendant certaines opérations, mais la table ...