c++ 覆盖、重载、隐藏

函数重载:

1、相同的范围内(即同一类中)

2、函数名相同;

3、参数不同;

4、virtual关键字可有可无;

函数覆盖:(父类中必须有virtual)========派生类函数
覆盖掉 基类函数;

指派生类中存在重新定义的函数,其函数名、参数、返回值类型必须同父类中相对应被覆盖的函数严格一致。覆盖函数和被覆盖函数只有函数体(花括号中的部分)不同。

当派生类对象调用子类该同名函数会自动调用子类中的函数,而不是父类中的版本,这个机制就叫做覆盖;

1、不同的范围内(分别在 基类 和 派生类中)

2、函数名相同;

3、参数相同;

4、virtual关键字必须有;

隐藏:

隐藏是指派生类的函数屏蔽了与其同名的基类函数;

A、派生类的函数与基类的函数同名,但是参数不同。不论有无virtual,基类的函数将被隐藏;=======<区别:
重载>

B、派生类的函数与基类的函数同名,参数相同,但基类函数无virtual,基类的函数被隐藏;=========<区别:覆盖>

时间: 2024-08-05 07:04:55

c++ 覆盖、重载、隐藏的相关文章

C++中的虚继承 &amp; 重载隐藏覆盖的讨论

虚继承这个东西用的真不多.估计也就是面试的时候会用到吧.. 可以看这篇文章:<关于C++中的虚拟继承的一些总结> 虚拟基类是为解决多重继承而出现的. 如:类D继承自类B1.B2,而类B1.B2都继承自类A,因此在类D中两次出现类A中的变量和函数.为了节省内存空间,可以将B1.B2对A的继承定义为虚拟继承,而A就成了虚拟基类.实现的代码如下: class A class B1:public virtual A; class B2:public virtual A; class D:public

C++重载,覆盖和隐藏区别

a.成员函数被重载的特征:(1)相同的范围(在同一个类中):(2)函数名字相同:(3)参数不同:(4)virtual 关键字可有可无. 因为函数参数不同,可以简单的理解为:两个重载函数是不同的函数,调用者能够明确 的根据不同的参数来调用不同的函数.那么如果存在这样两个函数,编译器怎么处理呢? class A{public:    void Func(int a, int b=0) {printf("This is Func1/n");}    void Func(int a) {pri

c++重载、覆盖和隐藏

c++成员函数的重载.覆盖和隐藏很容易混淆,因此我们必须搞清楚这一点. 1.重载 重载特点:同一访问区域(同类).函数名称相同.函数参数不同(不关心返回类型).virtual关键字可有可无. 代码示例: class OverLoad { public: void test() {} void test(int i) {} void test(float i) {} void test(int i, float j) {} }; 2.覆盖 覆盖是指派生类函数覆盖基类函数,特点是:不同访问区域(不同

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++重载、覆盖、隐藏的区别与举例

参考博客:http://blog.csdn.net/hexi_2000/article/details/4392107 //重载,覆盖,隐藏举例 #include <iostream> using namespace std; class A { public:     int n;     void fun()     {         cout<<"A::fun()"<<endl;     }     virtual void fun(int 

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

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

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++中的重载、覆盖和隐藏的区分

C++中经常用到重载.覆盖和隐藏这三个概念,也经常容易搞混.所以,这篇博文来整理一下它们之间的异同. 1. 重载--实现多态性 A.相同的范围(同一个类中) B.函数的名字相同 C.参数类型不同(不能进行隐式类型转换) D.Virtual关键字可有可无 2. 覆盖(重写)--派生类函数覆盖基类函数 A.不同的范围(分别位于基类与派生类中) B.函数名字相同 C.参数相同 D.基类函数必须有virtual关键字 3. 隐藏(重定义)--派生类的函数屏蔽了与其同名的基类函数 A.如果派生类的函数与基