C++学习Tips(三)重载

论坛 期权论坛 期权     
IT真经   2019-7-21 05:46   2510   0

C++允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。
重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。当你调用一个重载函数或重载运算符时,编译器通过把你所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。
1、函数重载
在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。
2、运算符重载
重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。
举例:
Box operator+(const Box&b) // 重载+ 运算符,用于把两个 Box 对象相加
{
   Box box;
  box.length = this->length+ b.length;
box.breadth =this->breadth + b.breadth;
box.height = this->height+ b.height;
return box;
}
3、可重载运算符列表
双目算术运算符
+ (加),-(减),*(乘),/(除),% (取模)
关系运算符
==(等于),!= (不等于),< (小于),> (大于>,=(大于等于)
逻辑运算符
||(逻辑或),&&(逻辑与),!(逻辑非)
单目运算符
+ (正),-(负),*(指针),&(取地址)
自增自减运算符
++(自增),--(自减)
位运算符
| (按位或),& (按位与),~(按位取反),^(按位异或),,>(右移)
赋值运算符
=, +=, -=, *=, /= , % = , &=, |=,  ^=, =
空间申请与释放
new, delete, new[ ] , delete[]
其他运算符
()(函数调用),->(成员访问),,(逗号),[](下标)
4、不可重载运算符列表
成员访问运算符
.
成员指针访问运算符
.* 、 ->*
域运算符
::
长度运算符
sizeof
条件运算符
? :
预处理符号
#
5、Tips
关于重载运算符:
  • 运算重载符不可以改变语法结构;
  • 运算重载符不可以改变操作数的个数;
  • 运算重载符不可以改变优先级;
  • 运算重载符不可以改变结合性。
类重载、覆盖、重定义之间的区别:
  • 重载指的是函数具有的不同的参数列表,而函数名相同的函数。重载要求参数列表必须不同,比如参数的类型不同、参数的个数不同、参数的顺序不同。如果仅仅是函数的返回值不同是没办法重载的,因为重载要求参数列表必须不同。(发生在同一个类里)
  • 覆盖是存在类中,子类重写从基类继承过来的函数。被重写的函数不能是static的。必须是virtual的。但是函数名、返回值、参数列表都必须和基类相同(发生在基类和子类)
  • 重定义也叫做隐藏,子类重新定义父类中有相同名称的非虚函数 ( 参数列表可以不同 ) 。(发生在基类和子类)





分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP