Ilmoittamalla luokka toisen luokan ystäväksi saadaan ehkä edellistä oliomaisempi ratkaisu:
/* FRIEND2.CPP */
/* Esimerkissä tehdään funktiot, jotka kertovat mahtuuko
ympyrä neliöön ja päinvastoin.
Toteutus ystäväluokan avulla.
*/
#include <iostream.h>
#include <math.h>
class cNelio; // Eteenpäin viittaus jotta void. käyt. ympyrässä
class cYmpyra{
friend cNelio;
double r; // Säde
public:
cYmpyra(double d=1.0) { r = d; }
int mahtuuko(const cNelio &n) const;
int mahtuuko(const cYmpyra &y2) const {
return ( r < y2.r );
}
};
class cNelio{
double s; // Sivun pituus
friend cYmpyra;
public:
cNelio(double d=1.0) { s = d; }
int mahtuuko(const cYmpyra &y) const {
return ( sqrt(2.0)*s/2 < y.r );
}
int mahtuuko(const cNelio &n2) {
return ( s < n2.s );
}
};
int cYmpyra::mahtuuko(const cNelio &n) const
{
return ( 2*r < n.s );
}
int main(void)
{
cNelio n1(2.1),n2(2.5); cYmpyra y1(0.9),y2(1.2);
if ( n1.mahtuuko(y1) ) cout << "Neliö 1 mahtuu ympyrän 1 sisälle.\n";
if ( y1.mahtuuko(n1) ) cout << "Ympyrä 1 mahtuu neliön 1 sisälle.\n";
if ( y1.mahtuuko(y2) ) cout << "Ympyrät mahtuvat sisäkkäin.\n";
if ( n1.mahtuuko(n2) ) cout << "Neliöt mahtuvat sisäkkäin.\n";
return 0;
}