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 :

accés à une fonction d'une autre classe


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 62
    Par défaut accés à une fonction d'une autre classe
    Bonjour,

    j'essaie d'avoir accés à une fonction d'une autre classe voici un exemple simple :
    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
    21
    22
    23
    24
    25
    26
    27
    class A;
    
    class B {  
    
     public :   
       constructeur
       destructeur
       void fonction1 (class A *a);
        friend class A;
    
       private:  
        int bdata;
    }
    
    class A {
    
        public :
       constructeur
       destructeur
       void fonction11 (void);
     }
    
    A::fonction11(void) {
    
    this->fonction1(this) // le but etant d'arriver a faire cet appel de fonction
    }
    J'espere avoir été claire quelqu'un à une idée sur le problème pour effectuer cet appel de fonction. Merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Par défaut
    Je pense que si dans ton main, tu fais :

    A a();
    B b();

    tu peux ensuite accéder à toutes leurs fonctions.
    a.fonction11();


    NB : possible que tu sois obligé de faire A* a = new A(), et donc de faire a->fonction11();

    NB2 : en faisant des fonctions statiques, tu peux y accéder de partout, sans devoir faire de constructeur.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 62
    Par défaut
    le probleme c'est que l'appel de la fonction 1 doit etre effectuée obligatoirement dans ma fonction11 pas possibilité de l'insérer dans un main car je suis en train d'essayer de faire une libraire donc pas de main a disposition

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Par défaut
    Citation Envoyé par juls64
    le probleme c'est que l'appel de la fonction 1 doit etre effectuée obligatoirement dans ma fonction11 pas possibilité de l'insérer dans un main car je suis en train d'essayer de faire une libraire donc pas de main a disposition
    Donc dans ta classe B, tu crée une instence de A (A a() ), et de la tu appelle la fonction (a.fonction1() ), en n'oubliant pas d'inclure A dans tes headers.


    Ou, comme je te l'ai dis, et qui est plus simple, tu fais :

    static void fonction1()
    {
    ...
    }


    Et de là, tu l'appelle de où tu veux, comme si il faisait parti de ta classe.

  5. #5
    Membre expérimenté
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Par défaut
    Dans ton code la ligne suivante ne compilera même pas :
    Parce que le this va renvoyer un objet de type A, or dans A t'as pas de fonction1.

    Si tu nous disais de que t'as vraiement besoin? Et est ce que t'as vraiement besoin de déclarer des classes amies ?

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 62
    Par défaut
    Merci pour vos réponses
    En fait il faut ajouter l'operateur de portée dans la fonction 11 pour appeler la fonction 1 le fait que la fonction 1 soit statique n'a aucun effet
    Dans mon cas j'ai une instance de classe unique donc constructeur privée et une fonction elle statique qui me renvoi l'objet donc A::getA()->fonction1 dans la fonction 11 et ca marche.

    Le fait d'avoir une instance de classe unique donc un constructeur privé ne me permettait pas de créer un nouvel objet, je sais je ne l'avais pas dit désolé

    Bonne journée

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Par défaut
    Citation Envoyé par juls64
    Merci pour vos réponses
    En fait il faut ajouter l'operateur de portée dans la fonction 11 pour appeler la fonction 1 le fait que la fonction 1 soit statique n'a aucun effet
    Dans mon cas j'ai une instance de classe unique donc constructeur privée et une fonction elle statique qui me renvoi l'objet donc A::getA()->fonction1 dans la fonction 11 et ca marche.

    Le fait d'avoir une instance de classe unique donc un constructeur privé ne me permettait pas de créer un nouvel objet, je sais je ne l'avais pas dit désolé

    Bonne journée
    Juste comme ca, en mettant ta fonction statique ca allège ton coden, car A::getA()->fonction1(), c'est lours à lire, mais bon, si ca marche comme ca et que ca te convient

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 62
    Par défaut
    j'ai essayé en mettant la fonction en statique mais quansd elle est statique ion ne peut pas utiliser l'operateur this se qui demande dans la fonction1 d'utiliser A::getA()-> dans sa propre class donc ca revient un peu au meme non ?

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 62
    Par défaut
    je vais testé peut etre je me suis trompé une erreur latente m'a peut etre fait zappé quelque chose
    Je reviens dans deux secondes

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 62
    Par défaut
    Pas d'erreur c'est lessieur (désolé): il ne faut pas mettre la fonction en statique car on ne peut pas utiliser l'operateur this donc je ne vois pas ou tu peux simplifier mon compilo n'est pas d'accord
    Merci quand meme les remarques quelles quelles soient font toujours avancer
    Tchao

  11. #11
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Par défaut
    Citation Envoyé par juls64
    Pas d'erreur c'est lessieur (désolé): il ne faut pas mettre la fonction en statique car on ne peut pas utiliser l'operateur this donc je ne vois pas ou tu peux simplifier mon compilo n'est pas d'accord
    Merci quand meme les remarques quelles quelles soient font toujours avancer
    Tchao
    sans l'operateur this.

    Dans ta classe B, pour appeler la fonction de A nommée "static void fonction1()", tu fais juste "fonction1()".
    Sauf erreurs, je le fais souvent, surtout quand tu n'as pas envie de faire des classes, parfois c'est mieux.

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

Discussions similaires

  1. Appel d'une fonction dans une fonction d'une même classe
    Par script73 dans le forum Général Python
    Réponses: 3
    Dernier message: 06/03/2015, 10h18
  2. Appel d'une fonction dans une iframe sur un autre domaine
    Par morikann dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/06/2007, 18h46
  3. Réponses: 8
    Dernier message: 10/01/2007, 21h10
  4. Réponses: 3
    Dernier message: 29/04/2006, 13h02
  5. Réponses: 3
    Dernier message: 16/01/2006, 16h02

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