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 :

friend sur une méthode et pas toute une classe


Sujet :

C++

  1. #1
    tut
    tut est déconnecté
    Membre averti
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Points : 394
    Points
    394
    Par défaut friend sur une méthode et pas toute une classe
    salut,
    la clause friend donne accès aux membres privés d'une classe à une autre classe.
    J'aimerai restreindre cet accès à un seul membre et pas à l'ensemble des membres privés.
    Est-ce possible ?

  2. #2
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 279
    Points : 11 015
    Points
    11 015
    Par défaut
    C'est possible en feintant. Exemple qui vaut un long discours.
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    /** But : tester comment mettre en oeuvre une amitié sélective.
     * ie.: faire en sorte qu'un membre m_i ne soit accessible qu'à une
     * seule fonction f_i() et que cette dernière n'ait accès qu'à m_i.
     */
     
    #include <iostream>
    #include <string>
    using namespace std;
     
    struct empty {};
     
    template <class Super>
    class Role1 : public Super
    {
        template <class T> friend void f1(T&t);
        friend void f1bis<>(Role1&);
        const string m1() { return "Méthode 1"; }
    };
     
    template <class Super>
    class Role2 : public Super
    {
        template <class T> friend void f2(T&t);
        const string m2() { return "Méthode 2"; }
    };
     
     
    typedef Role1<Role2<empty> > TYPE;
     
     
    template <class T> void f1(T&t) { cout << t.m1() << endl; }
    template <class T> void f2(T&t) { cout << t.m2() << endl; }
    /*template <class T> void f2(T&t) { cout << t.m1() << t.m2() << endl; }*/
    template <class R> void f1bis(R&t) { cout << t.m1() << endl; }
     
     
    int main (int argc, char **argv)
    {
        TYPE toto;
        f1(toto);
        f1bis(toto);
        f2(toto);
    }
    Bref, la question est : "Est-ce que cela en vaut la peine ?" Il faut voir si les rôles se regroupent bien par couches ou non.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Août 2003
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 247
    Points : 276
    Points
    276
    Par défaut
    Pas directement je pense.

    Mais tu peux faire quelque chose de ce genre:
    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
     
     
    class B;
     
    class A
    {
    private:
       int _a;
       int _b;
     
       friend void B::set_a(&A, int);
    };
     
     
    class B
    {
       void set_a(&A a, int i) { A._a = i; }
    };

  4. #4
    tut
    tut est déconnecté
    Membre averti
    Avatar de tut
    Inscrit en
    Juillet 2002
    Messages
    373
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 373
    Points : 394
    Points
    394
    Par défaut
    ok, merci.

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

Discussions similaires

  1. [AC-2010] Enable = False sur un record et pas toute une table
    Par lefabe dans le forum VBA Access
    Réponses: 0
    Dernier message: 10/04/2014, 12h05
  2. Réponses: 6
    Dernier message: 31/10/2012, 16h01
  3. Réponses: 0
    Dernier message: 24/05/2011, 11h05
  4. Utiliser une méthode non-static dans une méthode static
    Par mcfly37 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 18/08/2010, 11h41
  5. Réponses: 3
    Dernier message: 14/03/2006, 11h34

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