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 ?
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 ?
C'est possible en feintant. Exemple qui vaut un long discours.
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.
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); }
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; } };
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager