PHPz2017-04-17 11:46:05
先来明确一下重载和重写的区别:
1.重载(overload)一般是指同一个作用域里,两个不同的函数用了同一个名字,但是它们必须具有不同的参数列表,例如参数类型不同,或者参个数不同。
2.重写(override)是指在子类中重新实现基类中的虚函数(记住,一定要是虚函数!如果子类中重现实现的是基类中的非虚函数,就应该叫做“隐藏(hide)”了!)。
现在来对号入座吧:假设你重载操作符“+”,其实你重载的函数名就是“+”,与原有(内置)的“+”具有相同的函数名。但是你重载的“+”和原有的“+”应该具有不同的参数列表(否则你就没必要重载了)。事实上,c++要求在重载操作符时,必须保证至少有一个参数是你的自定义的类类型,如果你这么重载
int operator+(int a, int b);
编译器就会报错。你会发现,整个过程中好像和虚函数没什么关系。所以,操作符重载只能叫“重载”,不能叫“重写”。
迷茫2017-04-17 11:46:05
对应原文:
override:函数覆写(重写太容易误解了)
overload:重载
operator overload:操作符重载
不叫覆写的原因,是因为这个特质跟继承关系无关。而重载更偏重其扩展性质。