以下类的定义只是为了说明虚拟机制而设计:
class Animal{
public:
int getNum();
}
class Bird : public Animal
{
public:
int getNum();
}
Animal *pa = new Bird();
1、pa->getNum();此时调用的是Animal类的getNum()
修改Bird类为:
class Bird : public Animal
{
public:
int getNum();
virtual int getAge();
}
2、pa->getAge();编译错误:Animal类中不存在getAge()
重新定义Animal与Bird类:
class Animal{
public:
virtual int getNum();
}
class Bird : public Animal
{
public:
int getNum();
}
3、pa->getNum();此时调用的是Bird类中的getNum()
class Query{
public:
virtual void show() = 0;
}
包含纯虚拟函数的类为抽象基类。试图创建一个抽象基类的独立对象会导致编译时刻错误。
虚拟函数的静态调用:
假如Query类以及派生类NameQuery定义了虚拟函数 isA();
//在编译时刻静态调用 isA()
Query *pq = new NameQuery( "dumbo" );
pq->Query::isA();//破坏了虚拟机制,调用基类的isA()