虚函数

虚函数允许我们在子类中将方法进行重写,假如有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复写的函数必须和前面的虚函数同名,否则将会出错,复写不是虚函数的父类函数也会出错

 

posted @ 2020-04-11 16:23  Wangtn  阅读(268)  评论(0编辑  收藏  举报