• 虚函数


    虚函数允许我们在子类中将方法进行重写,假如有AB两个类,B是A的子类,如果我们在A中建立一个方法并将其标记为虚函数,那么我们将可以在B类中对其进行改写以完成其他的功能

    #include<iostream>
    #include<string>
    
    class Entity
    {
    public:
        std::string GetName() { return "Emtity"; }
    };
    
    class Player :public Entity
    {
    private:
        std::string m_Name;
    public:
        Player(const std::string& name)
            :m_Name(name) {};
        std::string GetName() { return m_Name; }
    };
    
    int main()
    {
        Entity* e = new Entity();
        std::cout << e->GetName() << std::endl;
    
        Player* p = new Player("Wang TN");
        std::cout << p->GetName() << std::endl;
    
        std::cin.get();
    }

     在主函数中加上一个新的Entity,然后令它指向子类,打印出来结果如下

     

     加上一个在全局中加上一个print函数,函数的输入为Entity类型

    #include<iostream>
    #include<string>
    
    class Entity
    {
    public:
        std::string GetName() { return "Emtity"; }
    };
    
    class Player :public Entity
    {
    private:
        std::string m_Name;
    public:
        Player(const std::string& name)
            :m_Name(name) {};
        std::string GetName() { return m_Name; }
    };
    
    void Print(Entity* e)
    {
        std::cout << e->GetName() << std::endl;
    }
    int main()
    {
        Entity* e = new Entity();
        Print(e);
    
        Player* p = new Player("Wang TN");
        Print(p);
        
        std::cin.get();
    }

    以看到打印的结果两个都是Entity

     如果我们想要打印出player的GetName,此时就需要虚函数,虚函数也是一种动态调度,如果需要写虚函数,那么要将basic class的basic function设为虚函数。

    此时程序结果如下,注意override复写的函数必须和前面的虚函数同名,否则将会出错,复写不是虚函数的父类函数也会出错

  • 相关阅读:
    10-vue自定义指令
    09-vue过滤器的基本使用
    vue总结
    07-vue的v-if和v-show
    06-循环数组v-for
    Java通过JNA调用dll或so
    Centos7安装FRP内网穿透工具进行远程连接
    centos7检查Java项目存活与否并重启
    centos7中Java项目重启
    Ubuntu 19.04: Connect to GNOME desktop environment via XRDP
  • 原文地址:https://www.cnblogs.com/wangtianning1223/p/12680648.html
Copyright © 2020-2023  润新知