Jäsenellekin on jäänyt tehtäviä. Jäsenen tulostus tietovirtaan voitaisiin tehdä esimerkiksi:
ostream &operator<<(ostream &os,const cJasen &jasen)
{
char erotin = jasen.erotin;
os << jasen.tunnus_nro << erotin
<< jasen.nimi << erotin
<< jasen.hetu << erotin
<< jasen.katuosoite << erotin
...
<< jasen.jmaksu << erotin
<< jasen.maksu << erotin
<< jasen.lisatietoja << erotin;
}
Nyt maksut tulostuisivat desimaaleiltaan varsin mielivaltaisesti. Jos tämä tyydyttää, niin em. tapa on aivan hyvä. Toisaalta voitaisiin tehdä apufunktio jonoksi, jonka tehtävänä on muotoilla reaaliluku merkkijonoksi siististi, esimerkiksi kahdella desimaalilla:
string jonoksi(double d)
{
char st[40];
double_jonoksi(N_S(st),d,"%4.2lf");
return string(st);
}
Nyt reaalilukukenttien tulostus voitaisiin tehdä
... << jonoksi(jasen.jmaksu) << erotin << jonoksi(jasen.maksu) << erotin ...
Symmetriasyistä kaikille muillekin tietotyypeille voitaisiin tehdä vastaava funktio C++:an kuormitusmahdollisuuden ansiosta. Näin jäsenen tietovirtaan tulostaminen voisi olla myös:
string cJasen::getAsString() const
{
return
jonoksi(tunnus_nro) + erotin
+ jonoksi(nimi) + erotin
+ jonoksi(hetu) + erotin
+ jonoksi(katuosoite) + erotin
+ jonoksi(postinumero) + erotin
+ jonoksi(postiosoite) + erotin
+ jonoksi(kotipuhelin) + erotin
+ jonoksi(tyopuhelin) + erotin
+ jonoksi(autopuhelin) + erotin
+ jonoksi(liittymisvuosi) + erotin
+ jonoksi(jmaksu) + erotin
+ jonoksi(maksu) + erotin
+ jonoksi(lisatietoja) + erotin;
}
ostream &operator<<(ostream &os,const cJasen &jasen)
{
os << jasen.getAsString();
return os;
}
Tästä on vielä se lisäetu, että voidaan esimerkiksi tehdä jonoksi- funktiosta sellainen, että tietty kokonaislukuarvo tai reaalilukuarvo (esim. -1) tallentuu tyhjänä merkkijonona, tarkoittaen ettei arvoa ole syötetty. 0:han ei yleensä voi tällainen arvo olla, koska 0 on usein aivan järkevä syöttö.