IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

THIS dans la gestion d’une liste chaînée


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2022
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Chili

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Alimentation

    Informations forums :
    Inscription : Octobre 2022
    Messages : 2
    Points : 5
    Points
    5
    Par défaut THIS dans la gestion d’une liste chaînée
    Bonjour! Je suis totallement nouveau a C++. Genre vraiment, je viens tout juste commencer.

    En ce moment j'ai un probleme avec le mot clé "THIS". Je ne comprends vraiment pas comment il fonctionne, encore moins quand je l'applique a une liste chainée.

    Je dois, écrire un programme qui utilise le mot clé THIS dans la gestion d’une liste chaînée de 20 objets de même nature.

    Alors, je m'imagine que quand on parle d'une liste chainée on parle soit de les listes, les piles ou les arbres

    J'avais ce code pour un pile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    #include <iostream>
    using namespace std;
     
     
    class Pile {
    int taille, *contenu, nb;
    public:
    Pile(int taille_max);
    ~Pile();
    	virtual void ajouter_au_sommet(int k);
    	virtual int prendre_au_sommet();
     };
     
    Pile::Pile (int taille_max) {
    	taille = taille_max;
    	contenu = new int[taille];
    	nb = 0;
     	}
     
    Pile::~Pile(){
    	delete[] contenu;
    }
     
     void Pile::ajouter_au_sommet(int k)
     
    {
    if(nb < taille) { contenu[nb] = k; nb++; }
    else abort();
    }
     
    int Pile::prendre_au_sommet()
     
     {
    if(nb > 0) { nb--; return contenu[nb]; }
    else abort();
    }
     
    int main(int argc, char **argv)
     
    {
    Pile pile(20);
     
    pile.ajouter_au_sommet(4);
    pile.ajouter_au_sommet(3);
    pile.ajouter_au_sommet(2);
    pile.ajouter_au_sommet(1);
     
    cout << pile.prendre_au_sommet() << endl;
    cout << pile.prendre_au_sommet() << endl;
    cout << pile.prendre_au_sommet() << endl;
    cout << pile.prendre_au_sommet() << endl;
    return 0;
    }
    Mais je sais vraiment pas comment integrer un "This" a cette pile?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 631
    Points : 10 559
    Points
    10 559
    Par défaut
    Il faut connaître la différence entre classe et objet.

    Donc, le this dans 1 classe est le pointeur de l'objet en cours.

    En C++, le this n'a que 2 fonctions spécifiques (sans vérifier donc à vérifier quand même )
    • à désambiguïser lorsque 1 paramètre de méthode a le même nom qu'1 attribut de sa classe. On code this->XXX pour faire la différence avec le paramètre XXX. Ce cas ne devrait jamais arriver avec de bons "coding styles"
    • à retourner l'objet en cours. Par exemple, avec les opérateurs pour chaîner les opérations.

  3. #3
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Il y a d'autres cas où on a besoin d'utiliser this:
    - dans certains appels de pointeurs membres;
    - quand on utilise l'héritage en métaprogrammation.

    Autrement dit, on n'utilise normalement pas this. *this désigne l'objet courant. Quand on accède à un membre dans une fonction membre, on peut indifféremment écrire this->le_membre ou le_membre.

    Ici ça revient à ajouter this-> devant toutes les utilisations de taille, contenu et nb dans le constructeur, destructeur et les fonctions membres. Ça ne changera rien, mais semble être le but de l'exercice.

    Et un commentaire sur le code. La classe a 2 fonctions virtuelles, donc est supposé être héritable. Il faut alors que le destructeur soit lui aussi virtuel. Un destructeur d'une classe héritable ne doit pas être à la fois public et non virtuel.

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,
    Citation Envoyé par dalfab Voir le message
    Et un commentaire sur le code. La classe a 2 fonctions virtuelles, donc est supposé être héritable. Il faut alors que le destructeur soit lui aussi virtuel. Un destructeur d'une classe héritable ne doit pas être à la fois public et non virtuel.
    Ou plutôt: un destructeur dans une classe héritable est sensé être:
    1. soit public et virtuel (pour permettre la destruction d'une instance de classe dérivée même lorsqu'elle est connue comme étant du type de la classe de base)
    2. soit protégé et non virtuel (pour ne permettre la destruction de la "partie de base" qu'au travers de la destruction des instances des classes dérivées)
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 15
    Dernier message: 16/01/2019, 19h17
  2. [Turbo Pascal] Unité Lists : Gestion de listes chaînées d'objets quelconques
    Par Eric Sigoillot dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 07/04/2014, 20h18
  3. Liste chainée+Gestion dune liste client
    Par boby35 dans le forum C
    Réponses: 8
    Dernier message: 01/12/2007, 12h25
  4. Réponses: 7
    Dernier message: 22/10/2005, 19h20
  5. Insertion d'un noeud dans une liste chaînée
    Par habib106 dans le forum Assembleur
    Réponses: 8
    Dernier message: 07/04/2004, 22h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo