3 votes

Pourquoi dois-je référencer this-> sur un constructeur de conversion ?

Je suis encore en train d'apprendre les bases de la POO en C++, et une question est apparue lors de la création d'une méthode opérateur avec un constructeur convert.

Voici mon code :

Fichier d'en-tête :

class Integer {
private:
    int num;
public:
    Integer();
    Integer(int);//Convert constructor
    ~Integer();
    operator int();
    int getNum();
};

Fichier source :

Integer::operator int() {
   return this->num; //No idea why I need to specify this-> here.
}

main méthode :

Integer a(50); 
a = 100;       

int b = (int)a; 
cout << b << endl;

Donc ma question est, pourquoi ai-je besoin d'utiliser this-> sur le operator int() méthode ? Je ne passe pas de paramètres contradictoires, donc cela ne devrait pas poser de problème au compilateur. J'ai également testé sans, et cela a bien fonctionné. Mais dans le manuel que je suis, il est explicitement indiqué que je dois ajouter la méthode this->num .

Des idées ?

6voto

templatetypedef Points 129554

Dans l'exemple particulier que vous avez montré ici, vous n'avez pas besoin d'utiliser la fonction this-> préfixe. Il n'y a que quelques cas où vous devez préfixer les membres de données avec le préfixe this-> comme

  • si vous voulez faire référence à un membre de données portant le même nom qu'une variable locale ou qu'un paramètre d'une fonction membre, ou encore
  • si vous utilisez les modèles et l'héritage ensemble et que vous avez besoin de rechercher quelque chose dans la classe de base.

Puisque l'exemple que vous avez ne tombe pas dans ces cas, comme vous l'avez noté dans votre propre exploration, l'option this-> Le préfixe est totalement facultatif.

0voto

Arash Points 1761

Réponse courte :

this est un pointeur vers votre classe.

*this est le contenu de votre classe.


Opérateur de flèche : x->y est équivalent à (*x).y mais d'une manière plus ordonnée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X