Programmation • IoT

Chapitre 10 – Les structures

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.).

10 Créer de nouveaux types de données 10.3 Créer une variable de type Date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.4 Initialiser une structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.5 Copie et affectation d’une structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.6 Copie et affectation d’une structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.7 Passer une structure à une fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.8 Retourner une structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Créer de nouveaux types de données
Accueil
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 une date. Le mot-clé struct indique que nous définissons une nouvelle structure. Dans cet exemple, la structure Date contient trois membres : À partir de maintenant, Date devient un nouveau type de données, au même titre que int, double 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. Créer de nouveaux types de données aujourdHui.jour = 31; aujourdHui.mois = 7; aujourdHui.annee = 2026; std::cout << aujourdHui.jour << « / » << 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 point (.). • Par exemple, l’expression désigne le membre jour de la variable aujourdHui.
Accueil
Créer de nouveaux types de données 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 de la structure. 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 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
Accueil
Créer de nouveaux types de données • 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. 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 à 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 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 éléments du code. Copie et affectation d’une structure Comme les types fondamentaux, une structure peut être copiée à l’aide de l’opérateur d’affectation.
Accueil
Créer de nouveaux types de données 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; 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;
Accueil
Créer de nouveaux types de données 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. 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 même variable. 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.
Accueil
Créer de nouveaux types de données void afficher(Date d) std::cout << d.jour << « / » << d.annee << std::endl; Date aujourdHui = {31, 7, 2026}; afficher(aujourdHui); 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 appelant. Date d = {31, 7, 2026};
Accueil
Créer de nouveaux types de données aujourdHui = creerDate(); std::cout << aujourdHui.jour << « / » << aujourdHui.mois << « / » << aujourdHui.annee << std::endl; La fonction creerDate() retourne une structure de type Date. Cette structure est ensuite copiée dans la variable aujourdHui. 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 Il est parfois utile de donner un autre nom à un type existant. Pour cela, le langage C++ met à disposition le mot-clé typedef.
Accueil
Créer de nouveaux types de données 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 déjà existant. Depuis C++11, il est recommandé d’utiliser le mot-clé using, qui remplit le même rôle avec une syntaxe plus moderne. using DateCalendrier = Date; Cette écriture est également plus adaptée aux templates que nous étudierons plus loin dans Une énumération (enumeration) permet de définir un nouveau type dont les valeurs possibles sont limitées à une liste prédéfinie. 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 Depuis C++11, il existe également les enum class, qui offrent une meilleure sécurité de Dans un premier temps, nous utiliserons les énumérations classiques afin de nous concentrer sur les notions fondamentales.
Accueil
Créer de nouveaux types de données • Une énumération permet de définir un nouveau type dont les valeurs possibles sont choisies par le programmeur. Les structures permettent de regrouper plusieurs informations décrivant un même objet au sein d’un nouveau type de données. 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. • 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.
Accueil
cpp-Chap10- Créer de nouveaux types de données
Accueil
Termes à ajouter au glossaire
Contenu

Inscription

×
Cancel