虚函数是动态联编的
eg1:
class A
{
public:
virtual void foo()
{
cout << "A::foo() is called" << endl;
}
};
class B :public A
{
public:
void foo()
{
cout << "B::foo() is called" << endl;
}
};
int main(void)
{
A *a = new B();
a->foo(); // 在这里,a虽然是指向A的指针,但是被调用的函数(foo)却是B的!
return 0;
}
//B::foo() is called
eg2:虚函数根据传入类的不同,分别调用不同的函数
class Animal
{
public:
virtual void eat() {
std::cout << "I'm eating generic food.\n";
}
};
class Cat : public Animal
{
public:
void eat() {
std::cout << "I'm eating a rat.\n";
}
};
void func(Animal *xyz) {
xyz->eat();
}
int main(void)
{
Animal *animal = new Animal;
Cat *cat = new Cat;
func(animal);
func(cat);
return 0;
}