2012-02-13 57 views
1

我对C++的这些重要功能很陌生,我已经在这里阅读了关于这些主题的一些问题/答案,并搜索了一些文档。但我仍然对此感到困惑......如何使用虚函数在C++中实现多态行为?

如果有人能为我提供一些很好的在线教程或书籍章节,这将使这个概念变得简单和缓慢,并从基本开始,这将是非常好的。

另外,如果有人知道一些现成的锻炼材料会很棒。

+0

请参阅[C++的书单](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) – MSalters 2012-02-13 11:54:31

+0

试着看看这本书的名单http://stackoverflow.com/questions/388242/the-definitive-c-book-guide - 和 - 列表 – Damian 2012-02-13 11:54:50

回答

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

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

您也应该检查Polymorphism in c++

如果你正在寻找好的书,这里是“时间好名单:The Definitive C++ Book Guide and List

+0

谢谢..当你说在Polymorphism上有大量可用的材料时,你会发现它。我更精确地看的是太了解它(即练习)。 – LivingThing 2012-02-13 12:15:05

+0

@MuhammadSalman:在开始“试验”并练习之前,您应该了解基础知识。 – LihO 2012-02-13 12:16:45

+0

这本书的问题是我没有太多时间在我的手上(至少现在),我不能尝试不同的书籍,看看我是否在寻找学习polymorpism。我需要阅读几本书的人的建议,在这本书中提供了关于多态性的最好和彻底的解释。 – LivingThing 2012-02-13 12:24:41