Rekurencje miałeś pokazaną na przykładzie funkcji liczącej elementy ciągu fibonacciego.
Polimorfizm sam ogarniesz niedługo :P Sam przez 2-3 miesiące nie bardzo wiedziałem jak go wykorzystać, ale jakoś przyszedł moment, że zrozumiałem i od tego czasu korzystam kiedy się da.
No ale ogólnie rzecz biorąc. Jeśli kilka klas dziedziczy z jednej, to na te wszystkie kilka klas może wskazywać wskaźnik typu klasy bazowej. Możesz dzięki temu stworzyć kontener atakujących ciebie zwierzaków różnych klas.
class Zwierze{
public:
virtual void attack() = 0;
};
class Wilk :public Zwierze{
public:
void attack(){ kod };
};
class Wiewiorka :public Zwierze{
public:
void attack(){ kod};
};
Teraz mozesz powrzucac do np vectora wskaznik obiekt Wilka i Wiewiorki:
vector<Zwierze*> enemies;
Zwierze* ptr = new Wilk;
enemies.push_back(ptr);
ptr = new Wiewiorka;
enemies.push_back(ptr);
I dzięki temu, ze klasa Zwierze ma metode wirtualną attack(), to mozesz metode attack() wywolac w klasach dziedziczacych poprzez wskaznik na klase bazowa:
for(short i =0; i< enemies.size(); i++)
enemies[i]->attack();