14. 函数重载,函数覆盖,函数隐藏
Posted nutshelln
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了14. 函数重载,函数覆盖,函数隐藏相关的知识,希望对你有一定的参考价值。
一.函数重载
1.函数名相同,参数列表不同(个数,顺序,类型)
2.vritual关键字、调用约定和返回值不做参考
二.函数覆盖(子类重写的虚函数覆盖了虚表中父类的虚函数,多态)
1.子类函数和父类函数声明一致(函数名,调用约定,参数列表,返回值)
2.父类函数有virtual关键字,子类可以不加virtual关键字
三.函数隐藏(子类隐藏父类的同名成员,或者说内层作用域隐藏外层作用域的同名成员)
1.作用域不同,例如子类和父类
2.子类和父类的函数同名,函数声明没要求
class B { public: void F() {} virtual void F(int) {} virtual void g(int, int) {} }; class D :public B { public: virtual void g(int, int) override {} //派生类的成员隐藏了同名的基类成员。声明在内层作用域的函数不会重载声明在外层作用域内的函数 void F(int, int) {} }; int main() { D d; d.g(1, 1); //d.F(3);//参数列表不匹配,编译报错。只能调用D的F,看不到B的F,除非加作用域运算符。 return 0; }
以上是关于14. 函数重载,函数覆盖,函数隐藏的主要内容,如果未能解决你的问题,请参考以下文章