您的位置:首页 > 编程语言 > C语言/C++

C++中重载/覆盖/隐藏的区别

2015-06-16 22:23 281 查看

C++中重载/覆盖/隐藏的区别

成员函数被重载的特征:

相同的范围(在同一个类中,作用于相同)

函数名相同

参数不同

virtual关键字可有可无

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

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

函数名相同

参数相同

基类函数必须有virtual关键字

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

如果派生类的函数与基类的函数同名,但是参数不同。此时,无论有无virtual关键字,基类的函数将被隐藏,*即无法通过与基类函数参数列表相同的函数去调用基类函数,因为已经被隐藏,会报错,当然,类内部可以通过::访问基类被隐藏函数,隐藏是对于对象的(注意别与重载混淆)

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

*也就是说,如果基类函数没有virtual声明,如果派生类用同样的函数名重定义了函数,则将隐藏基类中所有与之同名的函数,无论参数列表是否相同,反正是隐藏了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: