Как использовать виртуальные функции для достижения полиморфного поведения в C ++? - PullRequest
1 голос
/ 13 февраля 2012

Я новичок в этих важных функциях C ++, я уже прочитал несколько вопросов / ответов по этим темам здесь и погуглил несколько документов.Но я все еще путаюсь с этим ...

Было бы замечательно, если бы кто-нибудь посоветовал мне хороший онлайн-учебник или главу книги, в которой эта концепция проста и медленна и начинается с основ.

Кроме того, если кто-то знает какой-нибудь материал для тренировок, который был бы полезен.

1 Ответ

7 голосов
/ 13 февраля 2012

Вот лучшее объяснение полиморфизма, которое я когда-либо слышал:

В этом мире много животных.Большинство из них издают звук:

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 ++

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...