前言
😋本文主要讲述C++中关于函数重载和运算符重载的一些基础知识。
🎡系统的梳理一下C++的相关知识,为后面的知识打下基础。
🧶重载提高了C++代码的复用性,节省了我们大量时间精力。
(从本文开始使用C++的输出输出方式,即iostream头文件定义的方式)
函数重载
🎡函数重载是指在同一个作用域
内定义多个函数名相同
但形参不同
的函数,即同名函数实现不同函数功能。
❗注意!必须是参数不同
才可以重载(参数不同可以是个数、类型、顺序不同)。
下面通过一个例子说明函数重载:
1 |
|
运算符重载
🎡在C++中,加号
通常用来计算两个数的和。
🍗而在string中,两个字符串对象
可以使用“+”进行相加。
🎁这就是运算符重载的应用,通过运算符重载
可以给符号
指定不同的含义。
运算符重载的定义
🎁运算符重载本质是函数重载
。
运算符重载的定义格式:
1 | 类型说明符 operator 运算符(参数列表) |
🎁运算符的操作对象不能全部为基本数据类型,至少一个是自定义的类对象。
🎡这五个常用运算符不允许重载:成员访问(.)、成员指针(*)、域(::)、条件(?:)、sizeof运算符。
运算符重载方式
运算符重载有两种方法:
- 重载为类的成员函数
- 重载为类的友元函数
重载为类的成员函数
双目运算符重载
🎡双目运算符即有两个操作对象
,比如加减乘除。
调用重载运算符的格式:
1 | 左操作数 运算符 右操作数 |
编译器解释为:
1 | 左操作数.operator 运算符(右操作数) |
下面,通过一个例子说明:
1 |
|
输出结果:
1 | 0 |
✨直接对自定义类的对象使用>操作符是没有意义的,我们重定义了这个操作符,使两个Book对象比较返回价格比较的结果。
🎃例子里使用了this指针
,前面有所提及,编译器会自动为成员函数增加一个参数,this指针,它指向当前对象
,即左操作数
。
单目运算符重载
🍗单目运算符只有一个操作数
,如自增运算符。
🎃单目运算符有前置运算符
和后置运算符
两种。
前置运算符
🎡前置运算符没有参数
,调用对象
就是操作数。
下面通过例子说明:
1 |
|
输出结果:
1 | 101 |
后置运算符
🎃后置运算符有一个参数用于区分
前置运算符,但是没有作用
。
下面通过例子说明:
1 |
|
输出结果:
1 | 100 |
重载为类的友元函数
🎡类的友元函数涉及类的封装,在后面的文章会讲到。
🎃这里不展开讨论,重载为类的友元函数
即操作数都作为重载函数的参数
。
🍟一般情况下,双目运算符
重载为类的友元函数
,便于对两个操作数进行操作,并且可读性高,符合正常思维逻辑。
🎉而单目运算符
通常重载为类的成员函数
。此外,C++还限定
了某些运算符必须重载指定类型的函数。感兴趣可自行查阅资料。
总结
😋本文介绍了函数重载和运算符重载的相关知识。
🎡运算符重载的本质是函数重载。
🧑以上仅仅是个人一些见解,难免会出现错误,还请指正。
🚩创作不易,本人保证所发文章均为精心筹备。
💌如需转载,请保留作者信息和博客地址。
📡如果感觉博客对你略有帮助,欢迎转发给你的朋友,让他们加入到技术风暴中来吧!