c++成员函数的重载、覆盖和隐藏很容易混淆,因此我们必须搞清楚这一点。

1.重载

重载特点:同一访问区域(同类)、函数名称相同、函数参数不同(不关心返回类型)、virtual关键字可有可无。

代码示例:

class OverLoad
{
public:void test() {}void test(int i) {}void test(float i) {}void test(int i, float j) {}
};

2.覆盖

覆盖是指派生类函数覆盖基类函数,特点是:不同访问区域(不同类)、函数名称相同 、参数相同、基类函数必须有virtual关键字。

3.隐藏

隐藏规则:

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

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

4.代码示例

#include <iostream>
using namespace std;class OverLoad
{
public:void test() {}void test(int i) {}void test(float i) {}void test(int i, float j) {}
};class Base
{
public:virtual void A(int i) {cout << "Base::A()" << endl;}void B(int i){cout << "Base::B()" << endl;}void C(int i){cout << "Base::C()" << endl;}void D(){cout << "Base::D()" << endl;}
};class Derive : public Base
{
public://覆盖父类的A  函数名、参数完全相同,且父类要有virtual,子类virtual可有可无virtual void A(int i){cout << "Derive::A()" << endl;}//隐藏父类中的B 函数名、参数完全相同,父类无virtualvoid B(int i){cout << "Derive::B()" << endl;}//隐藏父类中的C 函数名相同、参数不同,与virtual无关void C(char* str){cout << "Derive::C()" << endl;}
};int main()
{Derive* d = new Derive;Base* b = d;//均调用父类中的Ad->A(1);b->A(2);//分别调用自己的Bd->B(1);b->B(1);//分别调用自己的Cd->C("1");b->C(1);d->D();//未被隐藏可以调用D()//d->C(1);由于隐藏了父类中的void C(int i),所以不能再调用
}

c++重载、覆盖和隐藏相关推荐

  1. c++成员函数的重载、覆盖、隐藏区别

    c++成员函数的重载.覆盖.隐藏区别 成员函数的重载.覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防. 重载与覆盖 成员函数被重载的特征: (1)相同的范围 ...

  2. 《C++成员函数重载、覆盖与隐藏》

    <成员函数的重载.覆盖与隐藏> ------------------------------------------------------------------------------ ...

  3. C++中的重载、覆盖、隐藏对比

    1.重载.重写(覆盖).隐藏三者概念解释 重载(overload):同一个可访问区域内被声明的几个具有不同参数列(参数的类型.个数.顺序不同)的同名函数.根据参数列表,最终确定调用哪个函数,重载不关心 ...

  4. 谈谈C++继承中的重载,覆盖和隐藏

    写正题之前,先给出几个关键字的中英文对照,重载(overload),覆盖(override),隐藏(hide).在早期的C++书籍中,可能 翻译的人不熟悉专业用语(也不能怪他们,他们不是搞计算机编程的 ...

  5. 【转】c++重载、覆盖、隐藏——理不清的区别

    原文网址:http://blog.sina.com.cn/s/blog_492d601f0100jqqm.html 再次把林锐博士的<高质量c++编程指南>翻出来看的时候,再一次的觉得这是 ...

  6. C++中类成员函数的重载、覆盖和隐藏的区别,超清楚!

    转载:https://www.cnblogs.com/liubo1/p/5925746.html 1.成员函数被重载的特征: (1)相同的范围(在同一个类中): (2)函数名字相同: (3)参数不同: ...

  7. C++学习笔记-----继承体系中函数的重载,覆盖和隐藏的区别

    1.重载,在同一个作用域中定义的同名不同参的一些函数为重载. 2.隐藏,若在基类中定义了某一non_virtual函数,在派生类重存在同名函数(不需要参数列表相同),基类的该函数在派生类中是不可见的, ...

  8. C# 虚方法(virtual)覆盖(override) - 隐藏(new) - 重载

    C# 虚方法(virtual)覆盖(override) - 隐藏(new) - 重载 using System; using System.Collections.Generic; using Sys ...

  9. 【原创】Performanced C++ 经验规则 第五条:再谈重载、覆盖和隐藏

    第五条:再谈重载.覆盖和隐藏 在C++中,无论在类作用域内还是外,两个(或多个)同名的函数,可能且仅可能是以下三种关系:重载(Overload).覆盖(Override)和隐藏(Hide),因为同名, ...

  10. C++成员函数重载、覆盖和隐藏的区别

    *************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com ****** ...

最新文章

  1. Docker入门与实践
  2. mysql5.7 only_full_group_by_MySQL5.7默认打开ONLY_FULL_GROUP_BY模式问题与解决方案
  3. pandas使用nsmallest函数返回特定数据列中前N个最小值(搜寻最小的n个元素)、pandas使用nsmallest函数返回特定数据列中前N个最小值所对应的数据行
  4. Go语言之并发示例-Pool(二)
  5. 掌握好这23个Linux命令常用命令,让工作效率翻倍
  6. visual studio创建项目时需要注意的问题
  7. bean覆盖 springboot_Springboot配置加载覆盖值顺序
  8. 【机器学习】总结:线性回归求解中梯度下降法与最小二乘法的比较
  9. C#报表控件ReportViewer rdlc 例(1) .
  10. mysql 从 a表updateb表_mysql A表自动更新和插入B表的数据
  11. 一个C++工程CPU占用100%问题的排查
  12. linux lsm模块,Linux安全模块LSM研究及改进
  13. mysql汉字格式_mysql 中的varchar255 uft-8 的格式到底能放多少汉字
  14. Jasmine基础API
  15. URLSession实现iTunes搜索听歌
  16. python report_python之Reportlab模块
  17. 黑客技术思维导图总结
  18. kali linux电脑配置要求,Kali Linux下配置PM3运行环境
  19. 设置屏幕亮度,并且监听屏幕亮度变化
  20. MySQL更新数据语句

热门文章

  1. android开发actionbar,Android 开发之为ActionBar 添加Actionbar Button
  2. Python查看本机所有联网应用程序信息
  3. 二元一次函数最值问题_沪科版八年级上册数学12.3.1一次函数与二元一次方程微课知识点精讲+练习...
  4. prim算法适用条件_内部排序算法的比较及应用
  5. 20210101:力扣第42周双周赛(上)
  6. ncl 多个单一时间文件合并成一个nc文件_iOS逆向--MachoO文件
  7. mysql中字符串处理替换字符replace和连接字符串函数concat
  8. 十分钟,我搞定了一个人物检测模型
  9. 特斯拉股东要用“独立董事长”换掉马斯克,不过最终失败了
  10. 不够持久?大疆无人机有了新无线充电系统,电力增强+++