Utilisation de this-> dans le constructeur de class en C++

Je suis un cours de C++ en ce moment, et ils font un bon travail en expliquant tout de manière détaillée. J’ai appris à programmer entièrement en Python, donc j’ai l’habitude de déclarer les choses directement et d’importer la classe si nécessaire.

En tout cas, j’ai des problèmes parce que dans le cours on dit qu’on n’a jamais besoin d’utiliser this-> mais quand j’essaie de définir une classe explicitement dans le même fichier .cpp, je ne peux faire fonctionner le constructeur que si j’utilise this->. Est-ce que quelqu’un peut m’expliquer ou me donner un lien vers une discussion qui explique cela ? Je n’ai pas réussi à trouver une référence qui explique ce problème au niveau de la définition de tous les éléments dans le même fichier.

class Person {
    public:
    string nom;
    int age;
    Person (string nom, int age) {
        nom = nom;
        age = age;
    }   
};

int main () {
    Person new_person("Alex", 22);
}

Cela fait que toutes les valeurs que je passe dans la fonction main ne sont pas initialisées. Cependant, si j’ajoute this-> à chaque ligne du constructeur, cela fonctionne correctement. Les exemples que je trouve n’utilisent pas this-> donc je ne comprends pas pourquoi c’est nécessaire ici. Peut-être que cela a à voir avec les espaces de noms qui sont encore un peu confus pour moi (tout le truc using namespace std :wink: mais j’ai pensé que puisque tout est dans le même fichier .cpp, cela devrait fonctionner.

Les variables d’argument suppriment vos variables membres dans la portée de votre constructeur. C’est-à-dire que dans ce contexte, nom fait référence à la variable d’entrée uniquement.

Ce que vous pourriez faire, c’est utiliser une liste d’initialisation :

Person (string nom, int age) :
    nom(nom), age(age) {}

Ou utiliser des noms différents :

Person (string _nom, int _age) {
    nom = _nom;
    age = _age;
}   

Mais votre approche utilisant this-> est tout à fait correcte.

Vous pouvez également lire: https://waytolearnx.com/2019/09/constructeurs-en-cpp.html

Dans ce cas, vous avez besoin de this car vous utilisez le même nom pour les paramètres du constructeur et les membres de la classe.

Person (string nom, int age) {
    this->nom= nom;    
    this->age= age; 
}   

Si vous aviez un nom différent pour votre paramètre, cela ne serait pas nécessaire.

Person (string _nom, int _age) {
    nom = _nom;
    age = _age;
}