C++学习[1]--重载,重写区别以及隐藏出现的情形

来源:互联网 发布:mac口红圣诞节限量版 编辑:程序博客网 时间:2024/05/16 11:07

机理上看:

 重载:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数,就成了不同的函数(对于编译器来说),如有两个同名函数function func(p:integer)和 function func(p:string):integer那么编译器做过修饰后的函数名称可能是这样的,int_func和str_func对于这两个函数的调用,在编译器间就已经确定了,是静态的,就是说,他们的地址在编译器就绑定了(早绑定),因此,重载和多态无关。


重写:和多态真正相关,当子类重新定义父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态的调用属于子类的该函数,这样的函数调用在编译器无法确定(调用的子函数的虚函数的地址无法给出),因此这样的函数地址在运行期绑定(晚绑定)


字面上看:

重写是子类的方法覆盖父类的方法,要求方法名和参数都相同,这和继承、多态相关。

重载是在同一个类中的两个或者两个以上的方法,拥有相同的方法名,但是参数却不同,方法体也不同,最常见的重载类中就是累的构造函数。

 

从作用区域看

重载可以一个类里面重载几次这个函数,也可以不同的类之间都对这个方法进行重载

而重写的关联性就更强些,是作用在父类、子类之间进行的演变行为。

 

 

最后对于隐藏现象的理解,一般指基类被子类隐藏这种现象。

如果派生的时候,父类没有写virtual关键字,而派生函数对父类函数进行了重写,那么这个时候父类原来的函数将会被隐藏,也就是屏蔽。

如果派生类和父类有同名函数,但是不同参数,这时候派生函数无法对父类的函数进行重载的,如果写了,也会讲原来父类的函数屏蔽掉。

原创粉丝点击