有关重载和覆写的说明

1、重载和覆写之间的区别:

重载(overloading)是指子类改写父类的方法,重载可以有函数重载和运算符重载。

覆写(overriding)是指同一个函数的不同版本之间参数不同、或称重写,覆盖。

(1)重载

重载是编写一个与已有函数同名但参数列表不同(参数类型或参数个数不同)的方法,具有以下特征:

  • 方法名必须相同
  • 参数列表必须不同,与参数列表的顺序无关
  • 返回值类型可以不同,但就两个函数的返回值而言,不足以区分两个函数是否重载。
(2)覆写

覆写是派生类重写基类的虚函数;具有以下特征:

  • 只有虚函数和抽象方法才能够被覆写
  • 具有相同的函数名
  • 具有相同的参数列表
  • 具有相同的返回值类型
(3)重载是一种语法规则,是由编译器在编译阶段完成,不属于面向对象编程;而覆写是由运行阶段决定的,是面向对象编程的重要特征。

2、运算符重载

       C++中允许类的对象构造运算符实现单目或双目运算,这种特性就叫运算符重载。对于每一个运算符@(注意:"?: "," . ", ".* ", "::","sizeof”这五个运算符不能重载),在C++中都对应一个运算符函数operator@(@此处表示C++中的各个运算符)。运算符重载函数的一般原形为:

type  operator@(arglist)

其中type为运算结果类型,arglist为操作数列表。


对于不同的情况要进行不同的运算符重载:

  • 在定义的对象间相互赋值时,重载赋值运算符;
  • 在数字类型增加算术属性时,重载算术运算符;
  • 为定义的对象进行逻辑比较时,重载关系运算符;
  • 对于容器(container),重载下标运算符[];
  • 从I/O流读写对象时,重载“>>”和“<<”运算符;
  • 实现smart指针时,重载成员指针运算符“->”;
  • 在少数情况下重载new,delete运算符。
运算符重载需要遵循以下规则:

  • 重载的运算符不能违反语言的语法规则;
  • 如果一个运算符可以放在两个操作数之间,就可以重载它来满足类操作的需要,即使这种用法原本为编译器所不能接受的;
  • 不能创造C++中没有的运算符;
  • 重载时不能改变运算符的优先级。

猜你喜欢

转载自blog.csdn.net/qq_35965090/article/details/77445012