类的成员函数重载、覆盖、隐藏、多态(持续更新....)
2018-03-19 13:33
267 查看
类的成员函数重载、覆盖、隐藏、多态:
概念区分:
1. 重载 必须在 同一个作用域内; 同一个类中,函数名相同,函数参数不同(类型不同 或 个数不同 或 顺序不同),构成重载成员函数。注意:不能根据函数的返回值类型来区分重载函数,因为可能会引起函数二义性(函数有忽略其返回值的情况,在这种情况下,编译器不知道调用哪个函数,从而会导致函数二义性问题)
2. 覆盖 出现在基类和派生类之间,不在同一个类作用域,函数名相同,参数也相同(个数,类型,顺序都相同),并且 基类函数为虚函数(即 函数前有 virtual),则派生类成员函数覆盖基类同名成员函数。覆盖即多态。
3. 隐藏 在基类和派生类中除了覆盖,其余情况就属于隐藏。
情况一:基类和派生类,同函数名,同参数个数、类型、顺序,但基类不是虚函数。此时,派生类成员函数隐藏基类同名成员函数。
情况二:基类和派生类,同函数名,函数参数不同,此时,派生类成员函数隐藏基类同名成员函数。
4. 总结: ① 同一个类中,同函数名,不同参数,为函数重载; (virtual关键字可有可无)
② 不同类中,同函数名,同参数,且基类为虚函数,为函数覆盖,即多态;
③ 不同类中,同函数名,不管参数是否相同,且不是虚函数,为函数隐藏;
5. 具体各类情况举例说明,详见 隐藏、覆盖、重载举例
概念区分:
1. 重载 必须在 同一个作用域内; 同一个类中,函数名相同,函数参数不同(类型不同 或 个数不同 或 顺序不同),构成重载成员函数。注意:不能根据函数的返回值类型来区分重载函数,因为可能会引起函数二义性(函数有忽略其返回值的情况,在这种情况下,编译器不知道调用哪个函数,从而会导致函数二义性问题)
2. 覆盖 出现在基类和派生类之间,不在同一个类作用域,函数名相同,参数也相同(个数,类型,顺序都相同),并且 基类函数为虚函数(即 函数前有 virtual),则派生类成员函数覆盖基类同名成员函数。覆盖即多态。
3. 隐藏 在基类和派生类中除了覆盖,其余情况就属于隐藏。
情况一:基类和派生类,同函数名,同参数个数、类型、顺序,但基类不是虚函数。此时,派生类成员函数隐藏基类同名成员函数。
情况二:基类和派生类,同函数名,函数参数不同,此时,派生类成员函数隐藏基类同名成员函数。
4. 总结: ① 同一个类中,同函数名,不同参数,为函数重载; (virtual关键字可有可无)
② 不同类中,同函数名,同参数,且基类为虚函数,为函数覆盖,即多态;
③ 不同类中,同函数名,不管参数是否相同,且不是虚函数,为函数隐藏;
5. 具体各类情况举例说明,详见 隐藏、覆盖、重载举例
相关文章推荐
- C++ 类成员函数重载(overload), 覆盖、重写(overrider), 隐藏(hidden)
- 重载、覆盖、多态与函数隐藏(屏蔽 )
- Java中类成员函数重载、覆盖和隐藏的区别
- C++之成员函数的重载,覆盖,隐藏
- 成员函数的重载、覆盖与隐藏
- 类成员函数的重载、覆盖和隐藏区别
- c++成员函数的重载、覆盖(override)与隐藏
- 类成员函数的重载、覆盖和隐藏区别?
- 转:成员函数的重载、覆盖与隐藏
- 成员函数的重载覆盖和隐藏
- C++ 成员函数的重载与覆盖与隐藏
- 重载、覆盖、多态与函数隐藏--1
- C++中成员函数的重载、覆盖与隐藏
- c++中多态函数以及函数重载,覆盖,遮蔽(隐藏)的区别
- 类成员函数的重载、覆盖和隐藏区别
- 成员函数的重载、覆盖与隐藏
- 重载、覆盖、多态与函数隐藏(转贴,值得一看)
- 类成员函数的重载、覆盖和隐藏区别
- C++成员函数的 重载、隐藏、覆盖分析(转)
- [zz]成员函数的重载、覆盖与隐藏