C++虚函数virtual!!!!!!!!!!

1.虚函数出现的作用:重写父类的方法

2.虚函数的好处:用父类的指针指向子类的实例,调用子类的成员函数,这种技术可以让父类的指针有多种形态,称之多态。

我们都知道,如果子类想用父类的代码,子类可以选择继承父类。如果普通成员函数,我作为父类,只是希望子类你能够调用就好,不要修改它的功能。而父类声明成virtual,虚函数,代表子类可以直接用、也可以改变重写它的功能,至于纯虚函数,则父类希望你一定要子类自己实现它的功能,纯需函数就是在父类中等于0的函数。

如果子类中定义了一个和父类同名的函数但是函数签名不同(函数签名=函数名+形参列表)这种属于overload还是属于2个不同的函数,父类和子类函数签名一致的情况下,称之为override,子类对象调用的话就只会调用自己类里的这个函数。

 

 

但是如果我们去掉virtual和override,使其不是虚函数,再来看打印的结果就是子类的方法

子类中的方法override是必须的吗?不是,但是建议这样写,他可以用来检验是否正确重写了父类的方法

复制代码
#include <iostream>

using namespace std;

class Entity
{
public:
   virtual std::string GetName(){return "Entity";}
};

class Player : public Entity
{
private:
    std::string m_name;
public:
    Player(const std::string& name):m_name(name){}
    std::string GetName() override {return m_name;}
};
int main()
{
    Entity *e = new Entity;
    cout << e->GetName() << endl;

    Player *p = new Player("Cherno");
    cout << p->GetName() << endl;

    Entity *entity = p;
    cout << entity->GetName();
    return 0;
}
复制代码

 3.纯虚函数,是父类的方法失效,必须在其子类中定义方法,因此所有父类的实例化对象都是错的,而且如果你的 子类尚未定义好接口,那实例化这个子类也是错的

 

posted @   我们都不是哈士奇  阅读(55)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示