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