虚函数是动态联编的
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;
}