首页 > 后端开发 > C++ > 正文

C++继承中的隐藏 名字隐藏与重写区别

P粉602998670
发布: 2025-09-01 11:02:01
原创
241人浏览过
名字隐藏指派生类同名成员屏蔽基类所有同名函数,无论参数或虚函数属性,发生在编译期;重写则要求派生类函数与基类虚函数签名相同,实现多态,发生在运行期。

c++继承中的隐藏 名字隐藏与重写区别

在C++的继承机制中,名字隐藏重写(override)是两个容易混淆但本质不同的概念。理解它们的区别对正确使用多态和继承至关重要。

名字隐藏(Name Hiding)

当派生类中定义了一个与基类同名的函数(无论参数列表是否相同)或变量,基类中的同名成员将被隐藏,即使函数签名不同。

这种隐藏不依赖于函数的参数列表,也不要求是虚函数。

  • 隐藏发生在编译期,属于静态行为
  • 只要派生类有同名函数,基类所有同名函数都会被隐藏(即使参数不同)
  • 即使基类函数是虚函数,也会被隐藏(除非被正确重写)

示例:

立即学习C++免费学习笔记(深入)”;

class Base {
public:
    void func() { cout << "Base::func()" << endl; }
    void func(int x) { cout << "Base::func(int)" << endl; }
};
<p>class Derived : public Base {
public:
void func(double x) { cout << "Derived::func(double)" << endl; }
};</p><p>// 调用
Derived d;
d.func();        // 错误!Base::func() 被隐藏,无法直接调用
d.func(1);       // 错误!Base::func(int) 也被隐藏
d.func(3.14);    // OK,调用 Derived::func(double)</p>
登录后复制

要恢复基类函数的可见性,可以使用 using 声明

class Derived : public Base {
public:
    using Base::func;  // 引入基类所有 func 重载
    void func(double x) { cout << "Derived::func(double)" << endl; }
};
登录后复制

重写(Override)

重写是指派生类中提供一个与基类虚函数具有相同签名的函数,实现多态。

重写发生在运行时,通过虚函数表实现动态绑定。

降重鸟
降重鸟

要想效果好,就用降重鸟。AI改写智能降低AIGC率和重复率。

降重鸟 113
查看详情 降重鸟
  • 必须是虚函数(基类函数用 virtual 声明)
  • 函数签名必须完全一致(返回类型、参数列表、const 修饰等)
  • 发生在运行期,支持多态调用
  • 使用 override 关键字可显式声明,帮助编译器检查错误

示例:

立即学习C++免费学习笔记(深入)”;

class Base {
public:
    virtual void show() { cout << "Base::show()" << endl; }
};
<p>class Derived : public Base {
public:
void show() override { cout << "Derived::show()" << endl; }  // 正确重写
};</p>
登录后复制

调用时体现多态:

Base* ptr = new Derived();
ptr->show();  // 输出 "Derived::show()",动态绑定
登录后复制

关键区别总结

  • 发生时机:名字隐藏在编译期,重写在运行期
  • 是否需要 virtual:重写必须基于虚函数,隐藏不需要
  • 函数签名:重写要求完全一致,隐藏只要同名即可
  • 多态支持:只有重写支持动态多态
  • 作用范围:隐藏会屏蔽基类所有同名重载,重写只影响一个函数

简单说:隐藏是名字层面的覆盖,重写是接口层面的多态实现

使用 override 关键字能有效避免误写成隐藏而本意是重写的问题。

基本上就这些。

以上就是C++继承中的隐藏 名字隐藏与重写区别的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号