|
|
|
|
Bonjour,
J'ai une question à propos des classes amies en C++ (j'ai déjà posté ça ailleurs mais ce n'était pas le bon forum, désolé pour le doublon)
Comment fait-on pour déclarer "amie" une fonction d'une autre classe sans déclarer "amie" la classe entière?
J'ai lu quelque part qu'il faut "préciser son nom complet à l'aide de l'opérateur de résolution de portée" mais qu'est-ce donc qu'un opérateur de résolution de portée?
Merci d'avance.
Configuration: Windows XP Firefox 2.0.0.9
Dans l'exemple qui suit, la classe B se déclare "amie" de la fonction fct de la classe A. Ainsi, cette fonction pourra utiliser la partie privée de la classe B :
class A
{
public:
int fct(int a, int b);
};
class B
{
friend int A::fct(int a, int b);
private:
static void f(void) {}
};
L'opérateur de résolution de portée est le double deux-points qui précède le nom de la méthode dans la déclaration friend. Il permet de préciser à quelle classe appartient cette fonction. Pour plus de précisions voir : Thinking in C++ : http://bruce-eckel.developpez.com/... |
Merci pour cette info, mais un autre problème se pose.
|
Si j'en crois mon manuel C++, ce problème est classique et ne peut être contourné qu'en déclarant la classe complète comme friend :
|
Deux choses :
int fct(const B& instance_de_B); Deuxième chose : dans la classe A si on n'utilise qu'une référence de B, il suffit de faire précéder le prototype de la classe A par la déclaration d'existance de la classe B :
class B;
class A
{
public:
int fct(const B& instance_de_B);
};
class B
{
friend int A::fct(int a, int b);
private:
static void f(void) {}
};
|
Le compilateur n'aime pas, mais pour une autre raison, tu n'as pas mis les mêmes paramètres à A::fct dans A et dans B
class A;
class B;
class B
{
friend int A::fct(const B& instance_de_B);
static void f(void) {}
};
class A
{
friend void B::f(void);
int fct(const B& instance_de_B);
}; |
Pour la définition de la fonction fct mille excuses c'est un copier/coller trop rapide.
|