2014-08-31 3 views
0

J'ai deux classes X et Y.Fonction d'un ami de classe d'une autre classe

Y a un membre privé mark, X a une fonction getmark().
J'ai déclaré getmark() en tant que friend de Y.

Maintenant, comment puis-je accéder au député mark de Y en utilisant la fonction friend?

C'est le code que j'ai jusqu'à présent

#include<iostream> 

using namespace std; 

class X 
{ 
    public: 
    int getmark(); 
}; 

class Y 
{ 
    int mark; 
    public: 
    friend int X::getmark(); 
}; 

int main() 
{ 

} 
+0

Downvote n'est pas un problème.Mais je serais heureux si ma question est répondue. – Pradeep

+0

Dans 'getmark()', faites quelque chose comme 'Y y; y.mark = 42; ' – juanchopanza

+0

Si la personne qui a déprécié la question peut prendre un moment pour fournir le code, ce serait très utile. – Pradeep

Répondre

1
#include<iostream> 

using namespace std; 

class Y; //forward declaration of class Y 
class X 
{ 
    public: 
    int getmark(Y); 
}; 

class Y 
{ 
    int mark; 
    public: 
    friend int X::getmark(Y); 
}; 

int X::getmark(Y obj){ 
    cin>>obj.mark; 
} 

int main() 
{ 
    X a; 
    Y b; 
    a.getmark(b); 
} 

Dans un premier temps, lorsque l'objet d'une (classe X) est créée, une déclaration avant de la classe Y est nécessaire afin de déclarer l'argument Y à X::getmark() .

La création de l'objet b (classe Y) ne posera pas de problème car le compilateur sait que la classe X existe (pour la fonction friend).

Ensuite, appelez simplement la fonction getmark() via l'objet a.

Remarque: Il est nécessaire de déclarer la fonction getmark() après la déclaration de la classe Y, sinon le compilateur considérera la classe Y comme un type incomplet.

0

Juste une fonction pour pouvoir mettre la marque:

void Y::setMark(int n) 
{ 
    mark = n; 
} 

Assurez-vous d'ajouter un prototype de fonction à la classe Y.

int X::getMark(Y &y) 
{ 
    return y.mark; 
} 


int main 
{ 
    X x; 
    Y y; 

    y.setMark(5); 

    cout << x.getMark(y) << endl; 
} 

Doit donner la sortie 5.

0
  1. Assurez-vous que la mise en œuvre de X::getmark() est après la définition de class Y. Sinon, X::getmark() ne bénéficiera pas d'être un ami de class Y.

  2. Accédez aux membres privés de Y comme vous le souhaitez dans X::getmark().

code:

class X 
{ 
    public: 
    int getmark(); 
}; 

class Y 
{ 
    int mark; 
    public: 
    friend int X::getmark(); 
}; 

int X::getmark() 
{ 
    Y y; 
    y.mark = 100; 

    // Do whatever you need to do with y. 

    return 0; 
} 
Questions connexes