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 :

opérateur This .


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 128
    Par défaut opérateur This .
    Bonsoir tt le monde;
    je suis entrain de réaliser un petit exercice on créant un objet "ville".
    pour cette effet j'ai créé 3 fichier : main.cpp ; ville.cpp et ville.h
    au cours d'implémentation de mes méthodes, j'ai utilisé l'opérateur this pour référencer l'objet courant.
    mais lorsque je compile mon projet, il me retourne des erreurs qui ont une relation avec "this".
    voile le contenu des 3 fichier:
    main.cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #include <iostream>
    #include <string>
    using namespace std;
    int main(int argc, char *argv[])
    {
        system("PAUSE");
    }
    ville.cpp :
    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
    #include <iostream>
    #include <string>
    #include "ville.h"
     
    using namespace std;
    /* 
       Implémentation ;
    */
    // Constructeur par défaur : Initialiser les paramêtres .
       Ville::Ville(void){
             NomVille ="Inconnu";
             NombreHabitant = 0;
             NomPays="Inconnu";
             categorie_ville="Inconnue";
       }
    // Constructeur surchargé :
       Ville::Ville(string Nom,int Nombre ,string Pays){
             NomVille= Nom;
             NombreHabitant = Nombre ;
             NomPays = Pays;
       }
    // Catégorie de la ville 
       void Ville::categorie(int nombre_cat){
             int tab_cat[3]={0,10000,100000};
             string categorie[3]={"?","A","B"};      
             for(int i=0;i<=2;i++){
                   if(this.NombreHabitant >= tab_cat[i]){
                         this.categorie_ville=categorie[i];
                           }
             }
       }
    // Description de la ville .
       string Ville::description(void){
             cout<<this.NomVille<<" est une ville de "<<this.NomPays<<" ;elle comporte "<<this.NombreHabitant<<" habitant "<<endl;
             cout<<" Donc; Elle est de categorie "<<this.categorie<<endl;
       }
    ville.h :
    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
    using namespace std;
    class Ville{
          private :
              string NomVille;
              int NombreHabitant;
              string NomPays;
              string categorie_ville;
          public :
                 Ville (void); // Constructeur par défaut.
                 Ville (string,int,string);// Constructeur paramétré .
                 void categorie(int);
                 string description(void);
                 //comparer(int,int);
                 ~Ville(void);        
    };
    SVP de m'aider de corriger mes erreurs.

  2. #2
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    Bonsoir,
    Le this ne te sert à rien dans ce cas de figure. Supprime le carrément.

    Note: en c++, pas de paramètre veux dire rien, en C veux dire un void ( je crois ). Tu ne dois pas mettre de void en C++ à ton constructeur, le compilateur le fera pour toi et ça sera dans l'ensemble un code moins chargé de choses inutiles à sa relecture. Tout comme le this que tu as rajouté

    Le this est utile pour la surcharge de operator=() et d'autre cas plus subtil et tu en auras rarement l'utilité.

  3. #3
    Membre éclairé
    Avatar de exe2bin
    Profil pro
    Passionné de programmation
    Inscrit en
    Mars 2009
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Passionné de programmation

    Informations forums :
    Inscription : Mars 2009
    Messages : 537
    Billets dans le blog
    3
    Par défaut
    Salut à toi ;
    pourrais tu préciser quelles erreurs !?
    Ton code à l'air assez sain et bien que "this" ne serve à rien dans ton programme
    je vois pas pourquoi il générerait des erreurs .
    Corrige aussi la déclaration de ton Destructeur qui ne doit JAMAIS comporter
    d'arguments , même void .

  4. #4
    Membre émérite Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    890
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 890
    Par défaut
    Citation Envoyé par exe2bin Voir le message
    Corrige aussi la déclaration de ton Destructeur qui ne doit JAMAIS comporter d'arguments , même void .
    Tu dois confondre avec le type de retour. Pour ce qui est des arguments, le void est inutile, mais pas faux.

    Cours de C/C++ : http://cpp.developpez.com/cours/cpp/...page_10#LX-H-1

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 128
    Par défaut
    Bonsoir tout le monde;
    merci bcp pour votre réponse;
    Pour gl :si je supprime la ligne using namespace std; dans le fichier .h
    pour exe2bin : je pense que y a pas de souci de mettre void comme paramètre du destructeur.jel'ai mis et pas de problème.
    le compilateur me retourne un erreur.
    de toute façon j'ai supprimé l'opérateur this....et tout ce que vous avez remarqué
    je copile maintenant, et il y aura aucun erreur.je vais maintenat

  6. #6
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    En complément de la réponse de Astraya, this est un pointeur, ce n'est donc pas this.XXX mais this->XXXXX.

    Sinon au passage :
    • Il y a un loupé dans l'utilisation du nom categorie. En particulier this.categorie dans la fonction description() est incorrect (n'existe pas).
    • On ne met pas de using namespace dans un header.
    • La fonction description() est censé retourner une string mais ne retourne rien.

  7. #7
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    688
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 688
    Par défaut
    je rajouterais qu'il est préférable d'initialiser les membres de la classe comme ceci
    ( http://cpp.developpez.com/faq/cpp/?p...EUR_liste_init )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       Ville::Ville(void):NomVille ("Inconnu"),
             NombreHabitant(0),
             NomPays("Inconnu"),
             categorie_ville("Inconnue"){}

Discussions similaires

  1. L’opérateur this
    Par chfakht dans le forum Général Java
    Réponses: 2
    Dernier message: 07/08/2013, 15h20
  2. l'opérateur This(langage algorithmique)
    Par miltone dans le forum Débuter
    Réponses: 6
    Dernier message: 23/07/2009, 14h25
  3. le opérateur this
    Par Methode dans le forum Langage
    Réponses: 1
    Dernier message: 06/04/2007, 16h12
  4. Objet Courant This et appel à un opérateur
    Par TheOyoStyledMan dans le forum C++
    Réponses: 2
    Dernier message: 13/06/2006, 16h35
  5. [imprecis]Réaliser a^n avec seulement l'opérateur d'addition
    Par Amon dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 08/11/2002, 22h22

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