TJT-L33 Olio-ohjelmointi, JY/TKTL, syksy 2002
5. demonstraatiotehtävät, viikko 44
2-4: Suunnittele ja toteuta kuvatunlainen luokkajärjestelmä. Kielenä voit käyttää C++:aa tai Javaa, tai pakon edessä jotain muuta oliokieltä. Muista myös kuvata ratkaisusi UML:llä. Käsinpiirretykin kelpaa. :)
#include <iostream>
using std::cout;
using std::endl;
using std::ostream;
#include <string>
using std::string;
#include "Aliluokka.h"
#include "Yliluokka.h"
int main(void) {
Yliluokka yli;
Aliluokka ali;
Aliluokka *alios=&yli;
cout << " ali.tee " << ali.tee()
<< " ali.virtu " << ali.virtu() << endl;
cout << " yli.tee " << yli.tee()
<< " yli.virtu " << yli.virtu() << endl;
cout << " alios.tee " << alios->tee()
<< " alios.virtu " << alios->virtu() << endl;
return 0;
}
Toteuta luokat Yliluokka ja Aliluokka niin, että ohjelma tulostaa seuraavan (osoitteet tietty vaihtuvat):
Syntyi Aliluokka osoitteeseen 0xbffffc50. Syntyi Yliluokka osoitteeseen 0xbffffc50. Syntyi Aliluokka osoitteeseen 0xbffffc40. ali.tee Aliluokka::tee ali.virtu Aliluokka::virtu yli.tee Yliluokka::tee yli.virtu Yliluokka::virtu alios.tee Aliluokka::tee alios.virtu Yliluokka::virtu Kuoli Aliluokka osoitteesta 0xbffffc40. Kuoli Yliluokka osoitteesta 0xbffffc50. Kuoli Aliluokka osoitteesta 0xbffffc50.
class Varasto_olio {
public:
virtual string tyyppi() = 0;
// palauttaa periytetyn luokan nimen
};
Kun puun jollekin alkiolle kutsutaan metodia tee(), tulee sen joko alkion ollessa puun lehti toteuttaa metodi, tai alkion ollessa solmu toteuttaa tee()-metodi jokaiselle alialkiolle.