2009-05-19 7 views
3

Puis-je avoir une méthode qui prend des arguments qui portent les mêmes noms que les membres de la classe en attente? J'ai essayé d'utiliser ceci:Accès aux arguments des arguments de méthode en C++

class Foo { 
     public: 
      int x, y; 
      void set_values(int x, int y) 
      { 
       x = x; 
       y = y; 
      }; 
    }; 

... mais cela ne semble pas fonctionner.

Y a-t-il un moyen d'accéder à l'instance dans laquelle je travaille, similaire au this de JavaScript ou au self de Python?

Répondre

14

Il est généralement recommandé d'éviter ce type de confusion en utilisant une convention de dénomination pour les variables membres. Par exemple, camelCaseWithUnderScore_ est assez commun. De cette façon, vous finirez avec x_ = x;, ce qui est encore un peu drôle à lire à haute voix, mais est assez clair sur l'écran.

Si vous absolument besoin d'avoir les variables et arguments appelés les mêmes, vous pouvez utiliser le pointeur this pour être précis:

class Foo { 
    public: 
     int x, y; 
     void set_values(int x, int y) 
     { 
      this->x = x; 
      this->y = y; 
     } 
}; 

Par ailleurs, notez le point-virgule arrière sur la définition de classe - nécessaire pour compiler avec succès.

+0

Éviter _. Voir cette note: http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-ac-identifier/228797#228797 –

+3

En fait, évitez de commencer un identifiant avec _ - Terminer avec _ est très bien et assez commun. –

+2

@MartinYork: @Bjanjan Resnik est correct. En outre, je crois que la décoration des variables membres avec un _ arrière est approuvé par Herb Sutter. – paxos1977

6

Oui, vous devriez être en mesure d'écrire cela en utilisant le « ce » mot-clé (ce qui est un pointeur en C++):

class Foo { 
    public: 
     int x, y; 
     void set_values(int x, int y) 
     { 
      this->x = x; 
      this->y = y; 
     } 
} 
1

En C++ l'instance actuelle est référencée par le pointeur constthis.

class Foo { 
    public: 
     int x, y; 
     void set_values(int x, int y) 
     { 
      this->x = x; 
      this->y = y; 
     }; 
}; 
Questions connexes