Вот лучшее объяснение полиморфизма, которое я когда-либо слышал:
В этом мире много животных.Большинство из них издают звук:
class Animal
{
public:
virtual void throwAgainstWall() { };
};
class Cat : public Animal
{
public:
void throwAgainstWall(){ cout << "MEOW!" << endl; }
};
class Cow : public Animal
{
public:
void throwAgainstWall(){ cout << "MOOO!" << endl; }
};
А теперь представьте, что у вас есть огромная сумка с животными, и вы не можете их видеть.Вы просто берете одного из них и бросаете его в стену.Затем вы слушаете его звук - он говорит вам, какое это было животное:
set<Animal*> bagWithAnimals;
bagWithAnimals.insert(new Cat);
bagWithAnimals.insert(new Cow);
Animal* someAnimal = *(bagWithAnimals.begin());
someAnimal->throwAgainstWall();
someAnimal = *(bagWithAnimals.rbegin());
someAnimal->throwAgainstWall();
Вы хватает первое животное, бросаете его в стену, слышите "МЕНЯ!"- Да, это был кот.Затем вы берете следующий, вы бросаете его, вы слышите "МООО!"- Это была корова.Это полиморфизм.
Вы также должны проверить Полиморфизм в c ++
И если вы ищете хорошую книгу, вот хороший список из них: The DefinitiveСправочник и список книг C ++