Question sur le masquage de la structure interne des classes
Résolu
A voir également:
- Question sur le masquage de la structure interne des classes
- Logiciel calcul structure bois gratuit - Télécharger - Architecture & Déco
- Ouvrez cette page. dans le code de la page, modifiez la couleur de fond de la classe .pix. un code de 4 chiffres doit apparaître dans la grille. lequel ? ✓ - Forum Programmation
- Structure d'un rapport de stage - Guide
- Stockage interne - Accueil - Guide Android
- Ajoutez à la liste de contacts ana le goff, inscrite le 27 novembre 2015, dans la catégorie i. puis triez les contacts en les classant : par ordre alphabétique de leur nom de famille (critère principal), puis par date du plus récent au plus ancien (critère secondaire). quel mot apparaît à la verticale dans la colonne "catégorie" entre les lignes 200 et 209 (en-tête compris) ? ✓ - Forum Word
1 réponse
Bonjour,
En C et en C++, il est possible de déclarer un type (sur la base d'un autre type).
Exemples :
En C++, il est possible de déclarer un type à l'intérieur d'une classe ou d'une structure. C'est ce qui est fait avec :
Ainsi, utiliser
L'opérateur
Comme le type
L'opérateur
Quel est l'intérêt ?
Dans l'absolu, on sent qu'on aura besoin du type de la cellule par exemple dans la méthode qui retournera le i-ème élément de la liste. Sans
On sent que ça n'est pas très élégant d'une part, et surtout si un jour on veut changer
En déclarant le type
On peut donc adapter l'implémentation de
Pour aller plus loin
L'opérateur
Ici on peut donc tout a fait parler de
Bonne chance
En C et en C++, il est possible de déclarer un type (sur la base d'un autre type).
Exemples :
typedef int toto_t; typedef int * pointeur_t;
En C++, il est possible de déclarer un type à l'intérieur d'une classe ou d'une structure. C'est ce qui est fait avec :
class Liste { ... typedef Cell * Place; ... }
Ainsi, utiliser
Placeou
Cell *à l'intérieur de la classe
Listea le même sens.
L'opérateur
::
Comme le type
Placeest dans la classe, c'est un nom "relatif". Depuis l'extérieur de
Listeil faut donc utiliser son nom absolu. Pour cela, le C++ a introduit (par rapport au C) un nouvel opérateur :
::. Celui-ci se comporte comme
/pour un chemin. Sauf qu'au lieu d'écrire
/Liste/Placeon écrit
::Liste::Placeou plus simplement
Liste::Place.
L'opérateur
::s'applique aux classes, structures, mais aussi aux espaces de nommage (voir mot clé
namespace).
Quel est l'intérêt ?
Dans l'absolu, on sent qu'on aura besoin du type de la cellule par exemple dans la méthode qui retournera le i-ème élément de la liste. Sans
typedef, cette méthode aurait les signatures :
Cell * Liste::get(int i) const { ... } const Cell * Liste::get(int i) const { ... }
On sent que ça n'est pas très élégant d'une part, et surtout si un jour on veut changer
Cellpar
Cellule, cela impactera non seulement le code de
Listemais aussi tout le code qui utilise
Liste. On voit alors que le fait d'utiliser
Cellest un détail d'implémentation.
En déclarant le type
Place, on abstrait le code extérieur à
Listede ce détail, car la signatures deviennent :
Place Liste::get(int i) const { ... } const Place Liste::get(int i) const { ... }
On peut donc adapter l'implémentation de
Liste::Placesans affecter le reste du code.
Pour aller plus loin
L'opérateur
::peut, à l'image de
/, être enchaîné. Ainsi voici à quoi ressemble la liste standard du C++ :
namespace std { template <typename T> class list { public: typedef ... iterator; typedef ... const_iterator; ... }; }
Ici on peut donc tout a fait parler de
std::list<int>::iteratorou
std::list<int>::const_iterator.
Bonne chance