Ystäväfunktioita käytetään, kun metodin pitää päästä käsiksi yhden tai useamman luokan alkioihin.
/* FRIEND.CPP */ /* Esimerkissä tehdään funktiot, jotka kertovat mahtuuko ympyrä neliöön ja päinvastoin. Jottei tehtävästä tulisi liian matemaattista, tutkitaan vain olioden kokoja. Oikeasti mielekkäämpi tehtävä tutkia leikkaavatko oliot toisiaan ja tällöin tarvittaisiin tietysti myös keskipisteitä */ #include <stdio.h> #include <math.h> class cNelio; // Eteenpäin viittaus jotta void. käyt. ympyrässä class cYmpyra{ double r; // Säde public: cYmpyra(double d=1.0) { r = d; } friend mahtuuko(const cYmpyra &y, const cNelio &n); friend mahtuuko(const cNelio &n, const cYmpyra &y); friend mahtuuko(const cYmpyra &y1, const cYmpyra &y2); }; class cNelio{ double s; // Sivun pituus public: cNelio(double d=1.0) { s = d; } friend mahtuuko(const cYmpyra &y, const cNelio &n); friend mahtuuko(const cNelio &n, const cYmpyra &y); friend mahtuuko(const cNelio &n1, const cNelio &n2); }; int mahtuuko(const cYmpyra &y, const cNelio &n) { return ( 2*y.r < n.s ); } int mahtuuko(const cNelio &n, const cYmpyra &y) { return ( sqrt(2.0)*n.s/2 < y.r ); } int mahtuuko(const cYmpyra &y1, const cYmpyra &y2) { return ( y1.r < y2.r ); } int mahtuuko(const cNelio &n1,const cNelio &n2) { return ( n1.s < n2.s ); } int main(void) { cNelio n1(2.1),n2(2.5); cYmpyra y1(0.9),y2(1.2); if ( mahtuuko(n1,y1) ) printf("Neliö 1 mahtuu ympyrän 1 sisälle.\n"); if ( mahtuuko(y1,n1) ) printf("Ympyrä 1 mahtuu neliön 1 sisälle.\n"); if ( mahtuuko(y1,y2) ) printf("Ympyrät mahtuvat sisäkkäin.\n"); if ( mahtuuko(n1,n2) ) printf("Neliöt mahtuvat sisäkkäin.\n"); return 0; }Edellä olisi tietysti voitu määritellä esimerkiksi neliölle ystäväfunktio, joka on ympyrän jäsenfunktio (metodi) ja sillä olisi parametrina vain neliö tai ympyrä ja toinen parametri otettaisiin sitten ympyrästä this -parametrilla. Eli funktio voi olla yhden luokan jäsenfunktio ja toisen luokan ystäväfunktio.