千家信息网

C++函数重载、隐藏与覆盖重写的方法是什么

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍了C++函数重载、隐藏与覆盖重写的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++函数重载、隐藏与覆盖重写的方法是什么文章都会有所收获,下面
千家信息网最后更新 2026年11月02日C++函数重载、隐藏与覆盖重写的方法是什么

这篇文章主要介绍了C++函数重载、隐藏与覆盖重写的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++函数重载、隐藏与覆盖重写的方法是什么文章都会有所收获,下面我们一起来看看吧。

1 函数重载

  • 定义:

C++规定在同一作用域中,例如一个类的成员函数之间,多个函数的名称相同,但是各个函数的形式参数(指参数的个数、类型或者顺序)不同时,构成函数重载。

  • 代码示例

int test(int a);int test(int a, double b);int test(double b, int a);int test(int a, const char ** c); void test(int a, const char ** c);             // 非重载,一起编译会提示错误,仅仅返回值不同编译无法区分使用的是那个重载函数
  • 总结

  • 前提:函数名称相同,即要求是同名函数;

  • 重载作用域:函数重载发生在横向水平的同一作用域,例如一个类成员函数之间的重载、全局函数之间的重载;

  • 重载类型:无论是类的静态成员函数,还是类的普通成员函数,亦或是普通的函数,都可以形成重载;

  • 重载要素:函数返回值类型函数重载无任何关系,仅仅返回值不同,形参相同的情况,会被禁止重载;

2 函数隐藏

  • 定义

函数隐藏是说,在不同作用域中,定义的同名函数构成函数隐藏(仅仅要求函数名称相同,对于返回值和形式参数不做更多要求,并且对于是否是虚函数也不做要求)。例如派生类同名成员函数屏蔽与其基类的同名成员函数,以及屏蔽同名全局外部函数。(经常有人隐藏和覆盖重写弄混,所以提前说下,如果在派生类中存在与基类同名的虚函数,并且返回值、形参都相同,则构成函数重写)。

  • 代码示例

#include using namespace std;class Parent{  public:    void test(int a) {      cout<<"this is Parent"<

输出如下

root@localhost override [master] $ g++ --std=c++11 test_hide.cpproot@localhost override [master] $ ./a.outthis is Son hide Parent function
  • 总结

  • 前提:函数名称相同,即要求是同名函数;

  • 作用域:不在同一个横向的作用域(分别位于派生类与基类的纵向作用域);

  • 要素:返回类型可同可不同,参数亦可同可不同;

  • 虚函数:

    参数不同,此时无论有无virtual关键字,基类的函数将被隐藏;

    参数相同的情况下

    此时基类函数无virtual则属于函数隐藏,后续无法继续基于此利用这个函数的多态性;

    如果是virtual则属于函数重写,继续多态性的保留;

3 函数重写

  • 定义

函数的覆盖和重写是一个意思的两个叫法,同时他的作用域也和函数隐藏相同,其实可以这么看,函数覆盖和函数隐藏共同构建了在具有集成关系的纵向作用域里面的同名函数的不同衍变,只不过函数覆盖的条件更加严格些。

在介绍函数隐藏的时候,为了弄清楚函数隐藏与覆盖重写,也简单描述了函数覆盖。这里再进一步进行描述下:派生类中与基类中,同名函数的返回值类型、参数的都相同,并且基类中定义为虚函数的情况下,构成虚函数覆盖,也叫虚函数重写。

  • 代码示例

#include using namespace std;class Parent{  public:    virtual void test(int a) {      cout<<"this is Parent"<

输出如下:

root@localhost override [master] $ g++ --std=c++11 test_override2.cpproot@localhost override [master] $ ./a.outthis is Son Override Parent function

附:令人迷惑的隐藏规则

C++的隐藏规则使问题复杂性陡然增加,这里"隐藏"是指派生类的函数屏蔽了与其同名的基类函数,规则如下:

(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。

(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)。

关于"C++函数重载、隐藏与覆盖重写的方法是什么"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"C++函数重载、隐藏与覆盖重写的方法是什么"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

函数 相同 作用 参数 不同 C++ 成员 类型 方法 名称 之间 代码 关键 关键字 情况 知识 示例 规则 多态 普通 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技园 河南真二互联网科技有限公司 互联网科技卖菜 朗新科技与工业互联网 科技互联网技术 艾特科技互联网 银川新华互联网科技学校地址 阿里巴巴算科技企业还是互联网 互联网教育科技公司vipkid 花神(南京)互联网科技有限公司 华夏恒生互联网科技013171 国大互联网教育科技有限公司薪资 山东子淼互联网科技有限公司 互联网科技包装股 广东鹅鹅鹅互联网科技有限公司 萌小萌互联网科技河南有限公司 互联网科技大佬云集 安徽九吞吴互联网科技有限公司 互联网企业和网络科技有限公司 武汉亿视互联网科技有限公司 极限挑战互联网科技 互联网科技的未来发展 佳云科技和互联网广告 互联网科技公司实习生 威龙国际互联网科技公司 山东子淼互联网科技有限公司 广州三三互联网科技有限公司 马化腾互联网科技教学 承德科技产业互联网平台 前海云享互联网科技
0