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

一.重载

成员函数被重载的特征:

(1)相同的范围(在同一个类中);

(2)函数名字相同;

(3)参数不同;

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

二.覆盖

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

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

(2)函数名相同;

(3)参数相同;

(4)基类函数必须有virtual关键字。

三.隐藏

隐藏是指派生类函数屏蔽了与其同名的基类函数,规则如下:

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

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

时间: 2024-10-28 15:43:13

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)函数名

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

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

重载、隐藏、覆盖的区别

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

C++ 成员函数的重载与覆盖与隐藏

重载与覆盖 成员函数被重载的特征: (1)相同的范围(在同一个类中): (2)函数名字相同: (3)参数不同: (4)virtual 关键字可有可无. 覆盖是指派生类函数覆盖基类函数,特征是: (1)不同的范围(分别位于派生类与基类): (2)函数名字相同: (3)参数相同: (4)基类函数必须有 virtual 关键字. 函数 Base::f(int)与 Base::f(float)相互重载,而 Base::g(void) 被 Derived::g(void)覆盖. #include <ios

C++函数的重载,覆盖和隐藏(——高质量编程)

函数重载概念 只有C++才有重载的概念,C语言没有. 靠行参列表的不同来区别不同的重载函数, 若是全局函数和成员函数同名时,不算重载,因为它们的作用域不同,所以成员函数会将全局函数给隐藏(遮蔽)了. 成员函数的重载,覆盖和隐藏 重载发生在相同的作用域中,而覆盖则发生在不同的作用域中 重载: 相同的作用域 函数的名字相同 函数的形参列表,顺序,类型,个数不同 virtual可有可无 覆盖: 作用域不同,属于不同的类中 函数的名字相同 形参列表相同 基类必须是虚函数

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

#include <iostream> class A { public: void func() { std::cout << "Hello" << std::endl; } void func(int k) { } }; class B : public A { public: using A::func; // 把这句注释掉试试,嘿嘿 void func(int i) { } }; int main() { B b; b.func();//编译

【非原创】C++类成员函数的重载、覆盖和隐藏

链接:https://www.nowcoder.com/questionTerminal/266d3a6d4f1b436aabf1eff3156fed95来源:牛客网 题目:类成员函数的重载.覆盖和隐藏区别描述正确的有? A.覆盖是指在同一个类中名字相同,参数不同 B.重载是指派生类函数覆盖基类函数,函数相同,参数相同,基类函数必须有virtual关键字 C.派生类函数与基类函数相同,但是参数不同,会"隐藏"父类函数 D.函数名字相同,参数相同,基类无virtual关键字的派生类的函数

类成员函数的重载,覆盖和隐藏的区别

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