...
Yksi olio-ohjelmoinnin perusajatuksista on abstrahointi (abstraction), eli asioiden käsitteleminen abstraktilla tasolla.
Esimerkki 1. Abstrakti luokka.
...
Code Block |
---|
// Luokka johon voidaan tuoda CElain-luokan perillisiä. class CElainTarha { protected: CElain* Elaimet[100]; // 100 CElain-tyyppistä osoitinta taulukossa int ElainLaskuri; // laskuri, joka kertoo monta Elainta on lisätty ylläolevaan taulukkoon. public: CElainTarha() : ElainLaskuri(0) // nollataan ElainLaskuri { } ~CElainTarha() { // Vapautetaan Elaimet-taulukon olioiden varaama muisti: for (int i=0; i<ElainLaskuri; i++) { delete Elaimet[i]; } } bool LisaaElain(CElain* elain) { if (ElainLaskuri < 100) { Elaimet[ElainLaskuri] = elain; // Lisätään parametrina saatu elain-olio Elaimet-taulukkoon ElainLaskuri++; return true; } else { return false; } } void SyotaElaimet() { for (int i=0; i<ElainLaskuri; i++) { Elaimet[i]->Syo(); // Kutsutaan kaikkien Elaimien Syo()-funktiota. Huom! '->' käytettään '.' sijaan silloin kun käsitellään osoittimia... } } }; |
Code Block |
---|
int main() { CElainTarha ElainTarha; ElainTarha.LisaaElain(new CKissa); ElainTarha.LisaaElain(new CKoira); ElainTarha.LisaaElain(new CKissa); ElainTarha.LisaaElain(new CKoira); ElainTarha.LisaaElain(new CKissa); ElainTarha.SyotaElaimet(); } |
...
No Format |
---|
Kissa syo kalaa...
Koira syo lihaa...
Kissa syo kalaa...
Koira syo lihaa...
Kissa syo kalaa...
|
Esimerkissä luodaan kantaluokka, CElain ja siitä periytetään kaksi perillistä, CKissa ja CKoira. Lisäksi luodaan CElainTarha-luokka, johon voidaan tuoda CElain-tyyppisiä osoittimia olioihin, riippumatta siitä, onko ne luotu CKissa vai CKoira -luokista. Tämä onnistuu siksi, että molemmilla luokilla on sama kantaluokka, CElain. Kutsumme lopuksi CElainTarhan metodia SyotaElaimet(), joka 'syöttää' jokaista eläintä, eli kutsuu sekä kissojen että koirien Syo()-metodeita.
...