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 :

non compréhension de this


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 371
    Par défaut non compréhension de this
    bonjour,

    Je ne comprends pas this
    Tout ce que je sais de this:
    -ne s'utilise que dans une classe
    0)Est=ce que je me trompe encore?

    Au fait,
    1)est-ce qu'il y a forcément un constructeur dans une classe?

    J'ai vu ceci à propos de this:
    https://docs.microsoft.com/fr-fr/dot.../keywords/this

    Dans la fonction Employee de la classe Employee,il y a écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     this.name = name;
     this.alias = alias;
    Avant la fonction,name et alias sont déclarés avec un type string
    3 questions m'interpellent alors dans la fonction:
    a)pourquoi le type n'est pas redonné?
    b)s'agit-il bien d'une affectation grâce à =?
    c)pourquoi y a-t-il redondance?(2X name et 2x alias)

    Les réponses m'éclairciront sur la compréhension de this


    merci de votre aide

  2. #2
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 670
    Par défaut
    Salut,

    Pourquoi ne poses-tu pas ta question dans le forum approprié (C#) ?

  3. #3
    Membre très actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 371
    Par défaut
    Ah bon?
    this n'existe pas en C++?

  4. #4
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 670
    Par défaut
    Si mais alors pourquoi tu demandes des explications sur un code C# ?

  5. #5
    Membre très actif
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 371
    Par défaut
    je me suis trompé sur le lien de la documentation
    je n'ai rien trouvé de tel en C++

  6. #6
    Membre Expert
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 95
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 670

  7. #7
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 599
    Par défaut
    Citation Envoyé par tabkelm Voir le message
    Je ne comprends pas this
    Tout ce que je sais de this:
    -ne s'utilise que dans une classe
    0)Est=ce que je me trompe encore?
    Plus exactement: this n'a de sens que dans le corps d'une fonction membre non statique d'une classe.
    this est un pointeur non modifiable qui pointe sur l'instance pour laquelle on a appelée la fonction membre.
    On se sert très rarement de this. Pour accéder à un membre il suffit d'indiquer son nom. Autrement dit, this->le_membre et le_membre sont équivalents.
    On utilise quelques fois *this qui désigne donc l'instance.
    Citation Envoyé par tabkelm Voir le message
    1)est-ce qu'il y a forcément un constructeur dans une classe?
    Oui, il en a toujours au moins un. Si on n'en défini aucun, il y en a trois implicitement créés en public:
    - le constructeur par défaut: Employee::Employee();
    - le constructeur par copie: Employee::Employee(Employee const&);
    - et le constructeur par déplacement: Employee::Employee(Employee&&).
    Si on défini un quelconque constructeur, le constructeur par défaut n'est alors plus créé automatiquement.
    Toute instanciation n'existe qu'après l'appel d'un des constructeurs.
    Même un type simple comme int a des constructeurs. Par exemples:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int  x{};    // va initialiser x à 0
    int  y;      // va utiliser le constructeur par défaut qui ne va rien faire laissant y dans un état indéterminé.
    Note que dans le corps du constructeur on peut utiliser this, mais ça n'est qu'à la fin que l'on peut considérer que *this est totalement initialisé.
    Citation Envoyé par tabkelm Voir le message
    Avant la fonction,name et alias sont déclarés avec un type string
    3 questions m'interpellent alors dans la fonction:
    a)pourquoi le type n'est pas redonné?
    b)s'agit-il bien d'une affectation grâce à =?
    c)pourquoi y a-t-il redondance?(2X name et 2x alias)

    Les réponses m'éclairciront sur la compréhension de this
    Ton exemple est en C#, il n'y a aucun point commun entre le C++ et le C#. Si tu souhaites des explications, donnes nous un exemple en C++.

  8. #8
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 769
    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 769
    Par défaut
    le pointeur this sert pour 2 cas :
    1) désambiguïser lorsque le nom d'1 paramètre de la méthode est le même que celui d'1 attribut/ membre.
    C'est ton cas, et on spécifie this->attribut. Mais on a juste à renommer le paramètre, c'est + simple.

    2) retourner 1 pointeur de classe afin de chaîner (édit: 1 pointeur ou 1 référence)
    Par exemple, avec l'opérateur ++

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Citation Envoyé par foetus Voir le message
    le pointeur this sert pour 2 cas :
    1) désambiguïser lorsque le nom d'1 paramètre de la méthode est le même que celui d'1 attribut/ membre.
    C'est ton cas, et on spécifie this->attribut. Mais on a juste à renommer le paramètre, c'est + simple.
    Utiliser le même nom pour le paramètre et l'attribut semble être une pratique courante aussi bien en C# qu'en C++.
    Mais ce que le C++ a de plus que le C#, c'est la liste d'initialisation du constructeur:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MaClasse::MaClasse(std::string name, std::string alias
     : name(name), alias(alias)
    {
    }

    En C# on n'a pas ça, donc on utilise this à la place.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/09/2009, 10h33
  2. Message d'erreur non compréhensible
    Par marsupilami34 dans le forum VBA Access
    Réponses: 2
    Dernier message: 18/01/2008, 09h50
  3. Réponses: 3
    Dernier message: 12/01/2007, 09h42
  4. [Linkage] Non compréhension d'erreur
    Par GLDavid dans le forum VC++ .NET
    Réponses: 6
    Dernier message: 04/01/2007, 14h58
  5. [FOP] [ERROR] non-static variable this cannot be referenced from a static context
    Par cash3000 dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 05/05/2006, 16h46

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