Chap 9 – Créer de nouveaux types de données
Document réservé
Vous consultez actuellement la présentation publique de ce chapitre.
Les documents PDF complets, comprenant les développements théoriques, les exemples détaillés et les exercices, sont disponibles sur demande.
Pour obtenir un accès, contactez-moi via la page Contact en indiquant les domaines qui vous intéressent (C++, ESP-IDF, électronique, etc.).
9.3 Créer une variable de type Date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
9.5 Copie et affectation d’une structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
9.6 Copie et affectation d’une structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
9.7 Passer une structure à une fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Chapitre 9 – Créer de nouveaux types de données
Chapitre 9 – Créer de nouveaux types de données
Jusqu’à présent, nous avons manipulé des variables indépendantes les unes des autres. Supposons maintenant que
nous souhaitions représenter une date.
Ces trois variables représentent-elles trois informations différentes ? En réalité, non. Elles décrivent toutes les trois
une seule et même information : une date.
Il serait donc pratique de pouvoir les regrouper au sein d’une seule variable. Le langage C++ permet de créer de
nouveaux types de données grâce aux structures.
Déclarer une structure
Une structure est un ensemble de variables regroupées sous un même nom. La structure suivante permet de représenter
Le mot-clé struct indique que nous définissons une nouvelle structure. Dans cet exemple, la structure Date contient
À partir de maintenant, Date devient un nouveau type de données, au même titre que int, double ou char.
Créer une variable de type Date
Une fois la structure définie, nous pouvons créer des variables de ce nouveau type exactement comme nous le faisons
avec les types fondamentaux.
aujourdHui.jour = 31;
aujourdHui.mois = 7;
aujourdHui.annee = 2026;
std::cout << aujourdHui.jour << « / »
AccueilChapitre 9 – Créer de nouveaux types de données << aujourdHui.mois << « / » << aujourdHui.annee << std::endl; La variable aujourdHui est une variable de type Date. Elle contient trois membres : jour, mois et annee. Pour accéder à un membre d’une structure, nous utilisons l’opérateur point (.). désigne le membre jour de la structure aujourdHui. désigne le membre mois, tandis que désigne le membre annee. L’opérateur . permet donc d’accéder individuellement à chacun des membres d’une structure. • Une structure est un nouveau type de données. Pour accéder à l’un de ses membres, on utilise l’opérateur • Par exemple, l’expression désigne le membre jour de la variable aujourdHui. L’opérateur . sera très souvent utilisé dans la suite de ce livre. Il permet d’accéder aux membres d’une structure, mais également aux membres d’une classe que nous découvrirons plus tard. Initialiser une structure Dans l’exemple précédent, nous avons affecté une valeur à chacun des membres de la structure. aujourdHui.jour = 31; aujourdHui.mois = 7; aujourdHui.annee = 2026; Lorsque les valeurs sont connues dès la création de la variable, il est possible d’initialiser directement tous les membres
AccueilChapitre 9 – Créer de nouveaux types de données Date aujourdHui = {31, 7, 2026}; std::cout << aujourdHui.jour << « / » << aujourdHui.mois << « / » << aujourdHui.annee << std::endl; Les valeurs placées entre accolades sont affectées aux membres de la structure dans l’ordre de leur déclaration. Date aujourdHui = {31, 7, 2026}; aujourdHui.jour = 31; aujourdHui.mois = 7; aujourdHui.annee = 2026; Cette écriture est plus concise lorsque toutes les valeurs sont connues au moment de la création de la variable. • Une structure peut être initialisée en une seule instruction grâce aux accolades. • Les valeurs sont affectées aux membres dans l’ordre de leur déclaration.
AccueilChapitre 9 – Créer de nouveaux types de données Le nom d’une structure doit représenter clairement ce qu’elle modélise. Par exemple, les noms décrivent immédiatement le rôle de la structure. À l’inverse, des noms tels que n’apportent aucune information sur leur contenu et rendent le programme plus difficile à comprendre. Il n’existe pas de règle imposée par le langage C++ concernant le nom des variables, des fonctions ou des types. Cependant, il est recommandé d’adopter une convention de nommage cohérente. Dans cet ouvrage, nous utiliserons les conventions suivantes : • Les noms des structures et des classes commencent par une majuscule. • Les noms des variables et des fonctions commencent par une minuscule. • Les constantes sont écrites entièrement en majuscules. const double PI = 3.141592653589793; Ces conventions facilitent la lecture des programmes en permettant de distinguer immédiatement les différents Copie et affectation d’une structure Comme les types fondamentaux, une structure peut être copiée à l’aide de l’opérateur d’affectation. Date d1 = {31, 7, 2026};
AccueilChapitre 9 – Créer de nouveaux types de données std::cout << d2.jour << « / » << d2.annee << std::endl; copie automatiquement tous les membres de la structure d1 dans la structure d2. Elle est donc équivalente à d2.annee = d1.annee; Cette copie est réalisée automatiquement par le compilateur. Copie et affectation d’une structure Comme les types fondamentaux, une structure peut être copiée à l’aide de l’opérateur d’affectation. Date d1 = {31, 7, 2026}; std::cout << d2.jour << « / » << d2.annee << std::endl; copie automatiquement tous les membres de la structure d1 dans la structure d2. Elle est donc équivalente à d2.annee = d1.annee;
AccueilChapitre 9 – Créer de nouveaux types de données Cette copie est réalisée automatiquement par le compilateur. Que va-t-il se passer ? Date d1 = {31, 7, 2026}; std::cout << d2.annee << std::endl; • Une structure est un véritable type de données. • Une simple affectation copie automatiquement tous les membres de la structure. • Il est important de ne pas confondre une copie avec un alias. Deux variables de type Date obtenues par une affectation sont indépendantes. À l’inverse, une référence est un alias : elle désigne exactement la Passer une structure à une fonction Une structure étant un véritable type de données, elle peut être transmise à une fonction exactement comme une variable de type int, double ou char. L’exemple suivant affiche le contenu d’une structure représentant une date. void afficher(Date d) std::cout << d.jour << « / » << d.annee << std::endl; Date aujourdHui = {31, 7, 2026}; afficher(aujourdHui);
AccueilChapitre 9 – Créer de nouveaux types de données La fonction reçoit une copie de la structure. La variable d est donc indépendante de la variable aujourdHui. Que va-t-il se passer ? void modifier(Date d) Date aujourdHui = {31, 7, 2026}; modifier(aujourdHui); std::cout << aujourdHui.annee << std::endl; Retourner une structure Une fonction peut également retourner une structure. L’exemple suivant crée une date et la retourne au programme Date d = {31, 7, 2026}; aujourdHui = creerDate(); std::cout << aujourdHui.jour << « / » << aujourdHui.mois << « / » << aujourdHui.annee << std::endl;
AccueilChapitre 9 – Créer de nouveaux types de données La fonction creerDate() retourne une structure de type Date. Cette structure est ensuite copiée dans la variable Quelle est la sortie du code suivant : Date d = {31,7,2026}; Date d1 = creerDate(); Date d2 = creerDate(); std::cout << d2.annee << std::endl; Dans la suite de cet ouvrage, nous utiliserons principalement la syntaxe using, tout en sachant que l’on rencontre encore très fréquemment typedef dans les bibliothèques et les programmes plus anciens. Il est parfois utile de donner un autre nom à un type existant. Pour cela, le langage C++ met à disposition le mot-clé typedef Date DateCalendrier; On peut alors déclarer une variable de la manière suivante : DateCalendrier aujourdHui; Le mot-clé typedef ne crée pas un nouveau type. Il définit simplement un autre nom (appelé alias) pour un type
AccueilChapitre 9 – Créer de nouveaux types de données Depuis C++11, il est recommandé d’utiliser le mot-clé using, qui remplit le même rôle avec une syntaxe plus using DateCalendrier = Date; Cette écriture est également plus adaptée aux templates que nous étudierons plus loin dans cet ouvrage. Une énumération (enumeration) permet de définir un nouveau type dont les valeurs possibles sont limitées à une liste Elle est particulièrement utile lorsque plusieurs valeurs symboliques représentent un même concept. On peut ensuite déclarer une variable de ce type. L’utilisation d’une énumération rend le programme plus lisible et limite les valeurs qu’une variable peut prendre. Depuis C++11, il existe également les enum class, qui offrent une meilleure sécurité de typage. Dans un premier temps, nous utiliserons les énumérations classiques afin de nous concentrer sur les notions • Une énumération permet de définir un nouveau type dont les valeurs possibles sont choisies par le Les structures permettent de regrouper plusieurs informations décrivant un même objet au sein d’un nouveau type Dans ce chapitre, nous avons vu qu’une structure peut être : • transmise à une fonction ; • retournée par une fonction. Les structures constituent une étape importante dans l’apprentissage du C++. Elles permettent d’organiser les données de manière claire et de manipuler des objets plus riches que les types fondamentaux. Dans les chapitres suivants, nous verrons comment transmettre efficacement ces structures aux fonctions, puis comment les enrichir de fonctionnalités grâce à la programmation orientée objet.
AccueilChapitre 9 – Créer de nouveaux types de données • Une structure permet de regrouper plusieurs variables sous un même type. • Une structure est un véritable type de données. • Une structure peut être copiée, transmise à une fonction et retournée par une fonction. • Les structures préparent naturellement l’étude des classes et de la programmation orientée objet.
Accueilcpp-Chap9- Chapitre 9 – Créer de nouveaux types de données
AccueilTermes à ajouter au glossaire