/* akutie.cpp */ #include #include #include /****************************************************************************/ // Luokka tulostustarkkuuden asettamiseksi class cStreamPre { ostream &os; long oldf; int oldp; public: cStreamPre(ostream &aos=cout,int npre=1,long flags=0) : os(aos) { oldf = os.setf(ios::showpoint | ios::fixed | flags); oldp = os.precision(npre); } ~cStreamPre() { os.flags(oldf); os.precision(oldp); } }; class cLuokka; /****************************************************************************/ class cOppilas { friend cLuokka; string nimi; double keskiarvo; cOppilas *seuraava; public: cOppilas(const string &animi, double arvo = 0 ) : nimi(animi) { keskiarvo = arvo; seuraava = NULL; } ostream &tulosta(ostream &os=cout) const; }; ostream &cOppilas::tulosta(ostream &os) const { cStreamPre pre(os,2,ios::left); os << setw(22) << nimi; os.setf(ios::right); os << " keskiarvo: " << setw(5) << keskiarvo << endl; os << endl; return os; } /****************************************************************************/ class cLuokka { string luokka; int oppilaita; cOppilas *ensimmainen; cOppilas *viimeinen; public: void alusta() { oppilaita = 0; ensimmainen = NULL; viimeinen = NULL; } cLuokka(const string &aluokka) : luokka(aluokka) { alusta(); } ~cLuokka() { poista_kaikki(); } int lisaa(const cOppilas &oppilas); ostream &tulosta(ostream &os=cout) const; void poista_kaikki(); }; ostream &cLuokka::tulosta(ostream &os) const { ... }; int cLuokka::lisaa(const cOppilas &oppilas) { ... } void cLuokka::poista_kaikki() { cOppilas *seur,*p = ensimmainen; while ( p ) { seur = p->seuraava; delete p; p = seur; } alusta(); } /****************************************************************************/ int main(void) { cLuokka luokka("1b"); cOppilas aku("Ankka Aku",5.0); cOppilas mikki("Hiiri Mikki",9.0); luokka.lisaa(aku); luokka.lisaa(aku); luokka.lisaa(mikki); luokka.tulosta(); return 0; }