C++重载、覆盖与隐藏关系

在C++中,成员函数的重载、覆盖与隐藏是很容易混淆的概念,一定要搞清楚他们之间的关系与差别。

1、成员函数重载的特性

(1)相同的范围(即在同一个类中)。也就是意味着基类与派生类之间的成员函数不存在重载的关系;

(2)成员函数名字相同,参数不同;

(3)virtual关键字可有可无。

2、覆盖

覆盖是指派生类函数覆盖基类函数,特征是:

(1)不同的范围(分别位于派生类与基类中);

(2)函数的名字相同,参数也相同;

(3)基类函数必须要有virtual关键字修饰。

3、隐藏

这里的“隐藏”指的是派生类函数屏蔽了基类中与其同名的成员函数,需要与上面的两个概念区别开来:

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

都将被“隐藏”。

(2)如果派生类函数与基类函数同名,并且参数也相同,但是基类函数没有virtual关键字修饰,那么此时

基类函数将被“隐藏”。

这三个关系是非常容易混淆的,一定要注意他们之间的区别、不同之处。

参考博文:http://www.cnblogs.com/qlee/archive/2011/07/04/2097055.html

时间: 2024-10-14 15:00:17

C++重载、覆盖与隐藏关系的相关文章

C++之重载覆盖和隐藏

继承体系下同名成员函数的三种关系 重载 在同一作用域内 函数名相同,参数列表不同(分三种情况:参数个数不同,参数类型不同,参数个数和类型都不同) 返回值类型可以相同也可以不同 重写(覆盖) 在不同作用域内,分别在父类和子类 函数名相同,参数列表相同,返回值类型相同,协变除外(下面会介绍什么是协变) 基类函数必须有virtual关键字修饰 父子类中函数的访问修饰符可以不同 重定义(隐藏) 在不同的作用域内,分别是父类和子类 函数名相同 在基类和派生类中只要不构成重写的都是重定义 重载 C++中函数

C++ 类函数的重载,覆盖和隐藏

覆盖(override): 覆盖指的是派生类的虚拟函数覆盖了基类的同名且参数相同的函数!函数覆盖覆盖,要满足两个条件 (1)基类中函数声明有virtual关键字 (2)基类函数和派生类的函数要函数名,参数,返回类型三者皆一致. 重载(overload):必须在一个域中,函数名称相同但是函数参数不同,重载的作用就是同一个函数有不同的行为,因此不是在一个域中的函数是无法构成重载的,这个是重载的重要特征 隐藏(hide): 派生类的成员函数隐藏了基类函数的成员函数.隐藏一词可以 这么理解:在调用一个类

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

转载请注明,原创地址:点击打开链接   http://blog.csdn.net/u010587274/article/details/38928561 个人微信公众号:tanzi_888 (潭子技术圈) C++中成员函数的重载.覆盖和隐藏的区别: 1 重载(overload): 是函数名相同,参数列表不同 重载只是在类的内部存在.但是不能靠返回值类型来判断.1.1)相同的范围(在同一个类中)1.2)函数名字相同1.3)参数不同 1.4)Virtual关键字可有可无 2  覆盖 (overrid

C++ Primer 学习笔记_28_操作符重载与转换(3)--成员函数的重载、覆盖与隐藏、类型转换运算符、*运算符重载、->运算符重载

C++ Primer 学习笔记_28_操作符重载与转换(3)--成员函数的重载.覆盖与隐藏.类型转换运算符.*运算符重载.->运算符重载 一.成员函数的重载.覆盖与隐藏 对于类层次的同名成员函数来说,有三种关系:重载.覆盖和隐藏,理清3种关系,有助于写出高质量的代码. 1.成员函数的重载 重载的概念相对简单,只有在同一类定义中的同名成员函数才存在重载关系,主要特点时函数的参数类型和数目有所不同:但不能出现函数参数的个数和类型均相同,仅仅依靠返回值类型不同来区分的函数,这和普通函数的重载是完全一致

C++基础:虚函数、重载、覆盖、隐藏<转>

转自:http://www.2cto.com/kf/201404/291772.html 虚函数总是跟多态联系在一起,引入虚函数可以使用基类指针对继承类对象进行操作! 虚函数:继承接口(函数名,参数,返回值),但是实现不继承(函数体) 非虚函数:继承接口,也继承实现: 1)虚析构函数(当一个类打算作为基类使用时候,其析构函数必须是虚函数) 构造函数可以为虚函数吗? 不可以,在生成对象的时候,必须向编译器明确指定要生成什么类型的对象,因而不存在虚函数的问题:只有当对象已经存在,我用什么接口去操作它

重载,覆盖和隐藏

http://blog.csdn.net/kendiv/article/details/675940 我们先来看一些代码及其编译结果. 实例一: #include "stdafx.h" #include <iostream.h> class CB { public:  void f(int)  {   cout << "CB::f(int)" << endl;  } }; class CD : public CB { public

重载、覆盖、隐藏

重载(overload): 必须在一个域中,函数名称相同但是函数参数不同,重载的作用就是同一个函数有不同的行为,因此不是在一个域中的函数是无法构成重载的,这个是重载的重要特征 必须在一个域中,而继承明显是在两个类中了哦,所以上面的想法是不成立的,我们测试的结构也是这样,派生类中的f(int,int)把基类中的f(int)隐藏了 所以,相同的函数名的函数,在基类和派生类中的关系只能是覆盖或者隐藏. 覆盖(override) 如果基类中的函数和派生类中的两个名字一样的函数f满足下面的两个条件(a)在

C++:重载、覆盖和隐藏

重载.覆盖和隐藏 共同点:函数名称相同. (1)重载:必须在一个域内,函数名称相同但是函数参数不同.重载的作用就是同一个函数有不同的行为. 重载完全是一个编译时(或静态)的概念.如果声明了同名函数,编译器会在编译时处理这些同名函数的调用问题, 确定调用哪一个函数,运行时不 涉及调用重载函数的额外开销或决定.而且,重载只用于函数,不用于类. 函数重载的特征:(1)相同的范围(在同一个类中):(2)函数名称相同:(3)参数不同:(4)virtual关键字可有可无 分析:因为函数参数不同,可以简单的理

C++基础篇--overload重载&amp;override覆盖&amp;overwrite隐藏

Overload.Override和Overwrite英文接近,比较容易混淆,再加上翻译五花八门,使用时张冠李戴,往往是今天清楚明天糊涂.这三个概念在前面章节已分别讨论,这里再集中比较,以作备忘: Overload (重载) 前面分析过C++函数重载是借助C++的name mangling机制,允许在同一作用域中出现多个同名不同参的函数,如: class Base{ int output(int a) {--}; int output(float b, float c){--}; } 这是重载,