• 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()
  • 相关阅读:
    LC 155 Min Stack
    TUM 慕尼黑工业大学 MSEI 课程结构介绍 ws19/20
    C++ MinGW 配合 Sublime Text 搭建
    LC 752 Open the Lock
    LC 200 Number of Islands
    Python lambda
    关于无法连接网络安装VisualVM解决方案
    二叉堆的解读
    哈希表的实现
    红黑树解读
  • 原文地址:https://www.cnblogs.com/handongdong/p/2223772.html
Copyright © 2020-2023  润新知