#include using namespace std; class A; // Le compilateur doit savoir que A est une classe... pas utile ici ! class B; // Le compilateur doit savoir que B est une classe //==================== Declaration classe A =================== class A { friend int f(const A& a, const B& b); public : void setA(int a); private : int _a; }; //==================== Declaration classe B =================== class B { friend int f(const A& a, const B& b); public : void setB(int b); private : int _b; }; //==================== Code classe A ========================== void A::setA(int a) { _a = a; } //==================== Code classe B ========================== void B::setB(int b) { _b = b; } //==================== Code fonction friend ================== int f(const A& a, const B& b) { return a._a + b._b; } //==================== Code main ============================== int main(void) { A a; a.setA(10); B b; b.setB(2); cout << f(a,b) << endl; // 12 return 0; }