Chapitre précédent | Sommaire principal | Chapitre suivant |
---|
Conteneur = collection d'objets de même type. Par exemple, dans bibliothèque, livre, mais également des dvd
Pair = 2 éléments (first et second), de type différent. Création avec make_pair
Tuple = N éléments, création avec make_tuple.
Inconvénient : non nommé, pas de sens sémantique. Par exemple pair<string, string> peut représenter un nom et un prénom, un titre de livre et un auteur, une marque de voiture et un modèle, etc. Cela dit juste que l'on a 2 string, mais ne donne pas de sens à ces string.
Structure = N éléments de type différent, avec des noms. Agrégation de variables (avec nom, type et valeur). Nom de structure.
Par exemple :
struct Personne { string nom {}; string prenom {}; }; struct Livre { string titre {}; string auteur {}; }; struct Voiture { string marque {}; string modele {}; };
N'importe quel type :
struct Personne { string nom {}; int age {}; double taille {}; bool masculin { true }; };
Voir même contenir d'autre structure :
struct Identite { string nom {}; string prenom {}; }; struct Personne { Identite identite {}; int age {}; double taille {}; bool masculin { true }; }; Personne personne {}; personne.age = 24; personne.identite.nom = "toto";
Permet de créer de nouveaux types.
Sémantique liée = mieux que tuple/pair (moins de risque d'erreur, meilleur compréhension du code)
Syntaxe pour déclarer : struct, bloc de déclaration, ne pas oublier le ;
Initialisation des membres : par défaut ou avec une valeur (si cela à un sens)
Accéder aux variable membres. En lecture et en écriture
Généricité ? Ajouter un type template, permet de modifier la structure de données. Par exemple :
template<typename T> struct Personne { T identifiant {}; string nom {}; string prenom {}; };
Utilisation :
Personne<int> personne_avec_numero_secu {}; personne_avec_numero_secu.identifiant = 12234567897; Personne<string> personne_avec_autre {}; personne_avec_autre.identifiant = "1a4slsn"; // utilisation possible avec aussi des structures Personne<int> personne_avec_identifiant {}; personne_avec_identifiant.identifiant.nom = "toto"; personne_avec_identifiant.identifiant.prenom = "dupont";
Remarque : déjà rencontré des types génériques : vector et array. Même principe, mais avec plus de fonctionnalités. On verra par la suite en détail comment ajouter encore plus de fonctionnalités.
Chapitre précédent | Sommaire principal | Chapitre suivant |
---|