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.纯虚函数,是父类的方法失效,必须在其子类中定义方法,因此所有父类的实例化对象都是错的,而且如果你的 子类尚未定义好接口,那实例化这个子类也是错的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端