C++中的覆盖和隐藏详解
目录
- 1. 前言
- 2. 共性
- 3. 区别
- 4. 区分
- 5.参考文章
- 总结
1. 前言 【C++中的覆盖和隐藏详解】继承是面向对象编程的重要特性,在c++中,当父类与子类出现同名函数时,会出现两种情况:覆写和隐藏,本文主要讨论c++中这两种情况的特点和使用区别
2. 共性 当子类继承父类,并且子类中有父类同名函数,那么子类将隐藏父类中所有同名函数,不可以对父类中同名函数直接进行访问,此时子类调用父类中函数需要用域操作符::
#includeusing namespace std; class A{ public:void fun1(){cout<<"A::fun1()"<
文章图片
b调用fun1()函数,会调用子类b的fun1()函数,而尝试使用b.fun(3)调用父类的void fun(int)函数时,会报错,因为父类中的同名函数都被隐藏。此时调用父类中函数的方法是使用域操作符::。
当父类中同名函数拥有virtual修饰符修饰时,此时子类对父类函数进行覆写
#includeusing namespace std; class A{ public:virtual void fun1(){cout<<"A::fun1()"<
文章图片
可见即使是虚函数覆写,也会隐藏父类中的所有同名函数。
当子类与父类有同名函数,无论是覆写还是隐藏的方式,在子类自身进行函数调用时,会调用子类函数而隐藏父类的所有同名函数,要访问父类函数需要通过域操作符进行访问。
3. 区别 覆写与隐藏的区别可以体现在基类指针的使用上,比如以下程序
#includeusing namespace std; class A{ public:void function1(){cout<<"A::function1"< function1(); a=&c; a->function2(); return 0; }
文章图片
b隐藏基类的同名函数function1(),当基类指针a指向子类b时,调用的是a的function1()函数,而子类c覆写a的同名函数function2(),当基类a指针指向子类c,调用的是c的function2()函数。
利用覆写的特点,可以实现c++的多态特性。
4. 区分 隐藏:当父类函数与派生类函数同名,并且父类函数无virtual关键字修饰,无论父类与派生类参数个数与类型是否相同,此时派生类函数隐藏父类所有同名函数
覆写:当父类函数与派生类函数同名,并且参数相同,返回值相同,并且父类函数有virtual关键字修饰,此时派生类函数覆写父类函数
5.参考文章 C++继承中的重载,覆盖和隐藏
总结 本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
推荐阅读
- 热闹中的孤独
- JS中的各种宽高度定义及其应用
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- Android中的AES加密-下
- 放下心中的偶像包袱吧
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- opencv|opencv C++模板匹配的简单实现
- C语言浮点函数中的modf和fmod详解
- C语言中的时间函数clock()和time()你都了解吗