【C++基础】重载,覆盖,隐藏

函数签名的概念

  函数签名主要包括1、函数名;2、参数列表(参数的个数、数据类型和顺序);但是注意,C++官方定义中函数签名不包括返回值!!

1、重载

函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数,与函数返回类型无关。重载要求参数列表必须不同,比如参数的类型不同、参数的个数不同、参数的顺序不同。

2、覆盖

函数覆盖发生在继承层次之中。覆盖需要满足的条件如下:


(1)发生覆盖的函数必须分别在父类和子类中


(2)子类函数与父类函数的函数签名相同,返回值也相同,即函数名相同、参数列表相同、返回值相同


(3)父类函数必须是虚函数


3、隐藏


隐藏是指子类中具有与父类同名的函数(不管参数列表是否相同),除去覆盖的情况。


(1)子类的成员函数与父类的成员函数名必须相同


(2)子类的虚函数无法覆盖父类的虚函数


即子类成员函数与父类成员函数具有相同的函数名,除去覆盖的情况


隐藏要求函数名一定相同,函数签名可以相同也可以不相同。也就是说,继承层次中,父类与子类同名函数要么是覆盖,要么是遮蔽。

 
时间: 2024-10-10 00:15:49

【C++基础】重载,覆盖,隐藏的相关文章

重载 覆盖 隐藏

本文转自:http://www.jb51.net/article/54225.htm 本文实例讲述了C++中重载.重写(覆盖)和隐藏的区别,对于C++面向对象程序设计来说是非常重要的概念.具体分析如下: 1.重载:重载从overload翻译过来,是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型. 示例代码如下: ? 1 2 3 4 5 6 7 8 class A{ public:   void test(i

c/c++:重载 覆盖 隐藏 overload override overwrite

http://www.cnblogs.com/qlee/archive/2011/07/04/2097055.html 成员函数的重载.覆盖与隐藏成员函数的重载.覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防.8.2.1 重载与覆盖成员函数被重载的特征:(1)相同的范围(在同一个类中):(2)函数名字相同:(3)参数不同:(4)virtual 关键字可有可无.覆盖是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类):(2)函数名

C++函数的重载/覆盖/隐藏

一.重载 成员函数被重载的特征: (1)相同的范围(在同一个类中): (2)函数名字相同: (3)参数不同: (4)virtual关键字可有可无. 二.覆盖 覆盖是指派生类函数覆盖基类函数,特征是: (1)范围不同(分别位于派生类与基类): (2)函数名相同: (3)参数相同: (4)基类函数必须有virtual关键字. 三.隐藏 隐藏是指派生类函数屏蔽了与其同名的基类函数,规则如下: (1)如果派生类的函数与基类的函数同名,但是参数不同.此时,不论有没有virtual关键字,基类的函数将被隐藏

重载、隐藏、覆盖的区别

成员函数的重载.隐藏.覆盖有时候难以辨别,如果你还不太理解,请往下看. 首先,我们先了解一下成员函数被重载,覆盖,隐藏的特征. 成员函数被重载的特征: (1)在同一个类中 (2)函数名相同,参数不同(参数的个数,参数的类型) (3)无返回值 成员函数被覆盖的特征: (1)不在同一个类中 (2)函数名相同,参数相同 (3)基类函数必须有vritual关键字 成员函数被隐藏的特征: (1)不在同一类中 (2)函数名相同,若参数不同,无论有无vritual关键字,基类函数都被隐藏. 若参数相同,基类函

c++三大概念要分清--重载,隐藏(重定义),覆盖(重写)

重载,隐藏(重定义),覆盖(重写)-这几个名词看着好像很像,不过其实一样都不一样!! 综述: 一.重载: (1)概念:在同一个作用域内:函数名相同,参数列表不同(参数个数不同,或者参数类型不同,或者参数个数和参数类型都不同),返回值类型可相同也可不同:这种情况叫做c++的重载! (2)举例: #include "stdafx.h" #include<iostream> using namespace std; int Add(int a, int b) { return a

C++中的重载,隐藏,虚函数,多态浅析

直到今日,才发现自己对重载的认识长时间以来都是错误的.幸亏现在得以纠正,真的是恐怖万分,雷人至极.一直以来,我认为重载可以发生在基类和派生类之间,例如: 1 class A { 2 public: 3 void test(int); 4 }; 5 class B : public A { 6 public: 7 void test(int, int); 8 }; 9 10 void main() 11 { 12 B b; 13 14 b.test(5);  //错误,应该b.A::test(5)

关于C++中覆盖,重载,隐藏的一点说明

C++覆盖 重载 隐藏是三个经常容易混淆的概念 这里我们简单总结下: 1.重载的条件(编译时多态) a.同一个类中 b.函数名相同,参数不同(返回值不能作为重载的条件) c.与函数是否为虚函数无关 2.覆盖的条件(运行时多态) a.不同的类中,往往是一个继承体系 b.基类该函数为虚函数 c.派生类函数名相同,参数相同 3.隐藏的条件 a.不同的类中,往往是一个继承体系 b.1 若继承类中该函数名相同,参数不同,不管基类中该函数是否为虚函数,隐藏 b.2 若继承类中该函数名相同,参数相同,则只有当

覆盖与重载与隐藏——SAP电面(3)

参考:http://man.chinaunix.net/develop/c&c++/c/c.htm#_Toc520634042 8.2.1 重载与覆盖 成员函数被重载的特征: (1)相同的范围(在同一个类中): (2)函数名字相同: (3)参数不同: (4)virtual关键字可有可无. 覆盖是指派生类函数覆盖基类函数,特征是: (1)不同的范围(分别位于派生类与基类): (2)函数名字相同: (3)参数相同: (4)基类函数必须有virtual关键字. 示例8-2-1中,函数Base::f(i

类中函数的重载、隐藏和覆盖

函数重载只会发生在同一个类中,函数名相同,只能通过参数类型,参数个数或者有无const来区分.不能通过返回值类型区分,而且virtual也是可有可无的,即虚函数和普通函数在同一类中也可以构成函数重载. 基类和派生类中只能是隐藏或者覆盖.1)隐藏是指派生类中有函数与基类中函数同名,但是没有构成虚函数覆盖,就是隐藏. 隐藏的表现:若基类中函数func()被派生类中函数func()隐藏,那么无法通过派生类对象访问基类中的func() 函数,派生类对象只能访问到派生类中的func()函数.不过基类中的f

c++虚函数,纯虚函数,抽象类,覆盖,重载,隐藏

C++虚函数表解析(转) ——写的真不错,忍不住转了  http://blog.csdn.net/hairetz/article/details/4137000 浅谈C++多态性  http://blog.csdn.net/hackbuteer1/article/details/7475622 C++抽象类  http://www.cnblogs.com/dongsheng/p/3343939.html C++的精髓——虚函数  http://blog.chinaunix.net/uid-268