函数隐藏 举例简要说明.
问题描述:
函数隐藏 举例简要说明.
答
“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,具体规则:
如果派生类的函数与基类的函数同名,但是参数不同.此时,若基类无virtual关键字,基类的函数将被隐藏.(注意别与重载混淆,虽然函数名相同参数不同应称之为重载,但这里不能理解为重载,因为派生类和基类不在同一名字空间作用域内.这里理解为隐藏)
如果派生类的函数与基类的函数同名,但是参数不同.此时,若基类有virtual关键字,基类的函数将被隐式继承到派生类的vtable中.此时派生类vtable中的函数指向基类版本的函数地址.同时这个新的函数版本添加到派生类中,作为派生类的重载版本.但在基类指针实现多态调用函数方法时,这个新的派生类函数版本将会被隐藏.
如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字.此时,基类的函数被隐藏.(注意别与覆盖混淆,这里理解为隐藏).
如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数有virtual关键字.此时,基类的函数不会被“隐藏”.(在这里,你要理解为覆盖哦^_^).