如何使用虚函数在C ++中实现多态行为?

时间:2012-02-13 11:51:07

标签: c++ pointers polymorphism virtual-functions

我是C ++的这些重要功能的新手,我已经在这里阅读了一些关于这些主题的问题/答案,并搜索了一些文档。但我仍然对此感到困惑......

如果有人可以建议我一些好的在线教程或书籍章节,这将很容易和慢,并从基本开始它。这将是伟大的。

另外,如果有人知道一些很好的现有运动材料。

1 个答案:

答案 0 :(得分:7)

以下是我听过的多态性的最佳解释:

这个世界上有很多动物。他们中的大多数发出一些声音:

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();

你抓住第一只动物,把它扔到墙上,你听到“MEOW!” - 是的,那是猫。然后你抓住下一个,扔掉它,你听到“MOOO!” - 那是牛。这是多态性。

您还应该检查Polymorphism in c++

如果你正在寻找好书,这里有'em:The Definitive C++ Book Guide and List

的好名单