zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    [BZOJ4034][HAOI2015]树上操作
    [BZOJ1030][JSOI2007]文本生成器
    [BZOJ2763][JLOI2011]飞行路线
    [POJ3667]Hotel
    [codevs1566]染色
    [codevs2460]树的统计
    [BZOJ2667][cqoi2012][kcoj]模拟工厂
    [NOI2009][codevs1846]KCOJ0191]植物大战僵尸
    [POJ1087]A Plug for UNIX
    Educational Round 66 题解
  • 原文地址:https://www.cnblogs.com/handongdong/p/2223772.html
Copyright © 2011-2022 走看看