虚函数是OOP用于实现多态的基本方法
什么是多态?
多态就是相同的信息给予不同的对象会引发不同的动作。
一个实例比较好:
# include <iostream>
# include <vector>
using namespace std;
class Animal
{
public:
virtual void eat() const { cout << "I eat like a generic Animal." << endl; }
virtual ~Animal() {}
};
class Wolf : public Animal
{
public:
void eat() const { cout << "I eat like a wolf!" << endl; }
};
class Fish : public Animal
{
public:
void eat() const { cout << "I eat like a fish!" << endl; }
};
class GoldFish : public Fish
{
public:
void eat() const { cout << "I eat like a goldfish!" << endl; }
};
class OtherAnimal : public Animal
{
};
int main()
{
std::vector<Animal*> animals;
animals.push_back(new Animal());
animals.push_back(new Wolf());
animals.push_back(new Fish());
animals.push_back(new GoldFish());
animals.push_back(new OtherAnimal());
for (std::vector<Animal*>::const_iterator it = animals.begin();
it != animals.end(); ++it)
{
(*it)->eat();
delete *it;
}
system("pause");
return 0;
}
运行结果:
I eat like a generic Animal.
I eat like a wolf!
I eat like a fish!
I eat like a goldfish!
I eat like a generic Animal.
如果没有加virtual
则是:
I eat like a generic Animal.
I eat like a generic Animal.
I eat like a generic Animal.
I eat like a generic Animal.
I eat like a generic Animal.
但是虚函数的实现原理是什么样的呢?
查了一些资料,下面几个有将的比较好的:
http://www.guokr.com/blog/469006/
http://www.lxway.com/4051119064.htm