C++中的重载 覆盖和隐藏

一.重载overload
在同一个可访问区域内被声明的几个具有不同参数列的(参数类型,个数,顺序不同)同名函数,程序会根据不同的参数列来确定具体调用哪个函数。重载不关心函数的返回值类型,即返回类型不同步能构成重载。。此外,const成员函数也能构成重载
a.处在相同的空间中,即相同的范围内。(在同一个类内)
b.函数名相同。
c.参数不同,即参数个数不同,或相同位置的参数类型不同。
d.const成员函数和非const成员函数可以形成重载。
e.virtual关键字,返回类型对是否能够成重载无任何影响。

二.覆盖overrde
是指派生类中,存在重新定义的函数,其函数名,参数列表,返回类型必须同父类的相对应的被覆盖的函数严格一致,覆盖函数和被覆盖函数只有函数体不同,当派生类对象调用子类中该同名函数时会自动调用子类中的覆盖版本,而不是父类中的被覆盖函数版本,这种机制就叫做覆盖。
a.不同的范围(分别位于派生类和基类)
b.函数名字相同
c.参数相同
d.基类函数必须有virtual关键字

三.隐藏
指的是派生类类型的对象、指针、引用访问基类和派生类都有的同名函数时,访问的是派生类的函数,即隐藏了基类的同名函数。
a.如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)
b.如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)

转自:http://blog.csdn.net/jixingzhong/article/details/1858943#1404105

猜你喜欢

转载自blog.csdn.net/c243311364/article/details/81220584