C++温故补缺(八):运算符重载和函数重载
运算符重载和函数重载
重载是c++多态性的一大体现,重载运算符是给运算符添加新的定义,使之前不能运算的对象变得可运算,且一般和运算符的意义相似.
函数重载主要是同名函数参数类型不同,参数个数不同,实现不同的功能
运算符重载
运算符重载一般作用于类的对象运算,因为它需要相同返回类型和参数,运算符重载依赖关键字operator
,格式:
返回类类型 operator<符号>(const 类&)
如Box operator+(const Box&)
例:
#include<iostream>
using namespace std;
class Box{
public:
int a;
Box operator+(const Box& b){
Box b1;
b1.a=this->a+b.a;
}
};
因为要用到this指针,所以运算符重载类中的,它的原理就是:
obj3=obj1+obj2
,obj1是发生重载的对象本身,用this调用其成员;obj2是传入const obj&对象,用形参名来调用成员,obj3就是返回值。
可重载的运算符和不可重载的运算符
- 可重载:
双目算术运算符 | + (加),-(减),*(乘),/(除),% (取模) |
---|---|
关系运算符 | ==(等于),!= (不等于),< (小于),> (大于),<=(小于等于),>=(大于等于) |
逻辑运算符 | |(逻辑或),&&(逻辑与),!(逻辑非) |
单目运算符 | + (正),-(负),*(指针),&(取地址) |
自增自减运算符 | ++(自增),--(自减) |
位运算符 | | (按位或),& (按位与),~(按位取反),^(按位异或),,<< (左移),>>(右移) |
赋值运算符 | =, +=, -=, *=, /= , % = , &=, |=, ^=, <<=, >>= |
空间申请与释放 | new, delete, new[ ] , delete[] |
其他运算符 | ()(函数调用),->(成员访问),,(逗号),[](下标) |
- 不可重载
.
:成员访问运算符
.*
, ->*
:成员指针访问运算符
::
:域运算符
sizeof
:长度运算符
?:
:条件运算符
#
: 预处理符号
运算符重载不止可以在类中实现,还可以在结构体中实现
#include<iostream>
using namespace std;
typedef struct test{
int a;
test operator+(const test& t){
test temp;
temp.a=t.a+this->a;
return temp;
}
}T;
int main(){
T t1,t2,t3;
t1.a=12;
t2.a=15;
t3=t1+t2;
cout<<t3.a;
}
函数重载
函数重载体现在相同的函数名和不同形参列表上,和java等都类似
如:
本文来自博客园,作者:Tenerome,转载请注明原文链接:https://www.cnblogs.com/Tenerome/p/cppreview8.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构