>  Q&A  >  본문

c++ - 为什么叫做操作符重载?

如题,按重载的定义,应该具有相同的函数名才行啊,为什么是叫操作符重载,而不是操作符重写?

PHPzPHPz2715일 전614

모든 응답(5)나는 대답할 것이다

  • PHPz

    PHPz2017-04-17 11:46:05

    先来明确一下重载和重写的区别:

    1.重载(overload)一般是指同一个作用域里,两个不同的函数用了同一个名字,但是它们必须具有不同的参数列表,例如参数类型不同,或者参个数不同。

    2.重写(override)是指在子类中重新实现基类中的虚函数(记住,一定要是虚函数!如果子类中重现实现的是基类中的非虚函数,就应该叫做“隐藏(hide)”了!)。

    现在来对号入座吧:假设你重载操作符“+”,其实你重载的函数名就是“+”,与原有(内置)的“+”具有相同的函数名。但是你重载的“+”和原有的“+”应该具有不同的参数列表(否则你就没必要重载了)。事实上,c++要求在重载操作符时,必须保证至少有一个参数是你的自定义的类类型,如果你这么重载

    int operator+(int a, int b);
    

    编译器就会报错。你会发现,整个过程中好像和虚函数没什么关系。所以,操作符重载只能叫“重载”,不能叫“重写”。

    회신하다
    0
  • 高洛峰

    高洛峰2017-04-17 11:46:05

    你把操作符看作函数,其实它就是一种函数,个人见解

    회신하다
    0
  • 大家讲道理

    大家讲道理2017-04-17 11:46:05

    操作符重载整体就是一个概念,你为什么一定要拆开来看?

    회신하다
    0
  • 迷茫

    迷茫2017-04-17 11:46:05

    对应原文:

    override:函数覆写(重写太容易误解了)
    overload:重载
    operator overload:操作符重载

    不叫覆写的原因,是因为这个特质跟继承关系无关。而重载更偏重其扩展性质。

    회신하다
    0
  • 阿神

    阿神2017-04-17 11:46:05

    类似于函数重载啊。。。

    회신하다
    0
  • 취소회신하다