c++ 类的虚拟机制

以下类的定义只是为了说明虚拟机制而设计:
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()
posted @ 2011-10-25 13:50  韩冬冬  阅读(357)  评论(0编辑  收藏  举报