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 :

operateur this fonctions class


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 48
    Points : 32
    Points
    32
    Par défaut operateur this fonctions class
    Bonjour
    Je n'arrive pas vraiment a comprendre ce que fait l'operateur this, ci-dessous un exemple de code utilisant this :

    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
     
    class<T> A
    {
    ...
    }
     
    A::fonction1(){....}
     
     
    A::fonction(int x)
    {
    ....
    this->fonction1(); 
    }
     
    B::fonction2()
    {
    y=this->fonction1()
    this->fonction(y); 
    }

    je ne comprends pas ce que la ligne de code suivante va faire

    Est qu'on peut faire des fonctions sans preciser a la fin de la fonction la valeur a retourner, dans ce cas que doit rendre la fonction a l'appel comme valeur.


    est ce que la ligne de code suivante


    peut etre remplace par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    A obj; 
    obj.function1()

    Si oui, dans cas quel est l'avantage de l'operateur this ?

    Merci

  2. #2
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    Bonjour,

    this contient l'instance sur laquelle l'opération à été appliquée.

    [edit]écrire explicitement this->... ne sert généralement à rien car il est implicite[/edit]
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 48
    Points : 32
    Points
    32
    Par défaut
    S'il n y pas a la fin de la fonction fonction() de "return", alors que va faire la ligne

    this->fonction(y);

    Merci


    Citation Envoyé par bruno_pages Voir le message
    Bonjour,

    this contient l'instance sur laquelle l'opération à été appliquée.

    [edit]écrire explicitement this->... ne sert généralement à rien car il est implicite[/edit]

  4. #4
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    Citation Envoyé par loisir1976 Voir le message
    S'il n y pas a la fin de la fonction fonction() de "return", alors que va faire la ligne
    this->fonction(y);
    s'il n'y a pas de return l'opération ne rend rien, celle-ci doit donc être déclarée void

    en fait le problème ce situe déjà au niveau de la définition de l'opération :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    A::fonction(int x)
    {
    ....
    this->fonction1(); 
    }
    car il n'y a pas d'indication du type de la valeur retournée / void
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Ton code a l'air incomplet. Il faudrait que tu postes l'intégralité du code qui te pose question car les réponses sont probablement liées (comme l'utilisation de this qui est parfois nécessaire ou ton problème de valeur de retour alors que les fonctions n'en précisent pas).

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 48
    Points : 32
    Points
    32
    Par défaut
    Effectivement la fonction est declare void, mais que vas faire la ligne de code

    this->fonction(y);

    dans la fonction fonction2

    Merci
    PS : je travaille sur un grand code que je n'arrive pas a dechiffrer et malheureusement je n'ai pas le droit a le diffuser.


    Citation Envoyé par bruno_pages Voir le message
    s'il n'y a pas de return l'opération ne rend rien, celle-ci doit donc être déclarée void

    en fait le problème ce situe déjà au niveau de la définition de l'opération :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    A::fonction(int x)
    {
    ....
    this->fonction1(); 
    }
    car il n'y a pas d'indication du type de la valeur retournée / void

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 48
    Points : 32
    Points
    32
    Par défaut
    Salut
    Je travaille sur un grand code que je n'arrive pas a dechiffrer et malheureusement je n'ai pas le droit a le diffuser. Je viens d'envoyer des precisions sur la fonction
    Merci

    Citation Envoyé par 3DArchi Voir le message
    Salut,
    Ton code a l'air incomplet. Il faudrait que tu postes l'intégralité du code qui te pose question car les réponses sont probablement liées (comme l'utilisation de this qui est parfois nécessaire ou ton problème de valeur de retour alors que les fonctions n'en précisent pas).

  8. #8
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    Citation Envoyé par loisir1976 Voir le message
    mais que vas faire la ligne de code

    this->fonction(y);
    et bien cela applique l'opération fonction avec l'argument y à l'instance courante, cela aurait pu être écrit fonction(y); car this est implicite dans ce cas
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 48
    Points : 32
    Points
    32
    Par défaut
    A quoi peut servir une fonction qui ne rend rien et qui n'affiche rien ? Peut on acceder aux variables de cette fonction pour les utliser dans d'autres fonctions ?
    Merci

    Citation Envoyé par bruno_pages Voir le message
    et bien cela applique l'opération fonction avec l'argument y à l'instance courante, cela aurait pu être écrit fonction(y); car this est implicite dans ce cas

  10. #10
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    Citation Envoyé par loisir1976 Voir le message
    A quoi peut servir une fonction qui ne rend rien et qui n'affiche rien ?
    première remarque : à partir du moment ou vous n'avez pas donné sa définition dans vos post on ne peut pas deviné ce qu'elle fait, en tout cas moi je n'ai pas de boule de cristal, donc donnez les informations suffisantes si vous voulez qu'on puisse répondre efficacement ... ou 'on' (en tout cas 'je') arrêteront de vous répondre

    second remarque : ne rien rendre et ne rien afficher ne veut pas dire ne rien faire. Une opération peut également être redéfini (virtual) par certaines classes et donc ne rien faire pour certaines

    Citation Envoyé par loisir1976 Voir le message
    Peut on acceder aux variables de cette fonction pour les utliser dans d'autres fonctions ?
    si rien de particulier n'est fait pour cela la réponse est non
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  11. #11
    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 : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par loisir1976 Voir le message
    A quoi peut servir une fonction qui ne rend rien et qui n'affiche rien ?
    Plein de choses : mettre à jour les variables membres de la classe, écrire dans un fichier, attendre, ou que sais-je encore.

  12. #12
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Salut,

    This est le pointeur sur l'objet courent à partir duquel la fonction est appelée.

    C'est, typiquement, grâce à this que a.foo() et b.foo() agissent sur les membres équivalents de l'objet a et b, sans qu'il n'y ait ambiguïté.

    Dans une grande majorité de cas, l'utilisation de this est implicite, c'est à dire qu'il ne faut pas l'ajouter pour que le code fonctionne correctement, mais, dans certains cas assez particuliers, il est nécessaire de l'indiquer pour aider le compilateur à faire son boulot

    L'avantage que l'on peut éventuellement retirer de l'utilisation de this lorsqu'elle n'est pas obligatoire, c'est qu'elle provoque bien souvent l'activation de l'intellisense, et donc permet d'une certaine manière de facilité la sélection des fonctions ou des membres de la classe.

    Maintenant, il faut savoir que toute fonction ne provoque pas forcément un affichage:

    Elle peut recalculer des données sur base des paramètres transmis, écrire dans un fichier, envoyer des données sur le réseau, lancer une série de missiles, ou dieu seul sait quoi faire.

    Généralement, le nom et éventuellement son type de retour permettent de se faire une idée *relativement* précise de l'objectif poursuivi par une fonction, et donc de l'utilité de son invocation à un endroit précis du code (pour autant du moins que le nom ait été choisi avec un minimum de bon sens et qu'il ne s'agisse pas de x3Wgh54 )

    Mais, si tu ne peux pas nous donner un minimum de renseignements, nous aurons énormément de mal à te dire s'il y a la moindre raison d'appeler cette fonction à cet endroit particulier du code
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. this et classe "parent"
    Par TabrisLeFol dans le forum Langage
    Réponses: 4
    Dernier message: 25/05/2006, 13h42
  2. Template d'une fonction (!= classe)
    Par Rodrigue dans le forum Langage
    Réponses: 7
    Dernier message: 08/05/2006, 22h02
  3. [debutant] Utilisation de l'operateur = dans une classe
    Par Battosaiii dans le forum Débuter
    Réponses: 8
    Dernier message: 10/11/2005, 23h01
  4. [Surcharge]Operateur<< avec une classe maison
    Par KeNnEdY dans le forum C++
    Réponses: 6
    Dernier message: 14/09/2005, 15h51
  5. declaration static d'une fonction classe
    Par SBP dans le forum MFC
    Réponses: 2
    Dernier message: 06/07/2004, 14h40

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