每日一言
真正的成长,藏在你克服的每一个恐惧里。

函数的重载
函数的的重载是什么意思呢?就是函数可以同一个名字,但是参数的类型或者是参数的数量不同以及参数的顺序不同都是可以构成函数的重载的,那么我这样说不明显,直接上案例

比如看这个 我的类里面写上了三个一样的名字的叫做print的函数,但是功能都是不一样的,一个是输出名字,一个是输出性别和年龄,一个是输出年龄,代码就不讲了大家都会
案例2:运算符重载(==)

这个是做了一个运算符重载:
什么叫做运算符重载,为什么要运算符重载?
运算符重载就是将我们常见的内置的+ - * /这些预设好的逻辑运算,我们不去使用因为有的时候逻辑不适用,而是自己重新的去自己自定义+-*/的作用和功能达到我们想要的逻辑,也多用于类的
这边我们定义出来了两个对象,现在我们想要比较p1和p2这两个对象,我们想要的结果是如果相同返回1,但是如果我们自己不去自定义重载运算符的话就,无法实现,甚至是报错,因为预设的==的操作
是用地址进行比较的,那当然永远都不同啦,而且也会报错,
所以我们要自己进行自定义

这个 bool operator==(person ptemp);这个就是函数的声明了 这个 operator==就是编译器给我们的标准写法,进行运算符重载的标准写法,当然我们这边是==因为是比较真假的,也有+ - 等等,然后这个参数的话是类型是类,因为我们的数据都在类里,我们类的对象里
所以我们都实现体里面就是这样写的,那么为什么是只有一个参数呢,不应该是两个对象吗,因为这个是专门的写法和说法,当代码走到p1的时候编译器就会去类里面寻找有没有运算符重载,所以实际上是p1.opreator==(p2)
![]()
让自定义类的对象能通过运算符(如 ==)触发预设的函数逻辑,编译器自动处理调用细节,左操作数用 this 隐式传递,右操作数作为参数显式传递。,这个是规定
因此这个了return 里面的name 就是第一个对象的值,ptmp.name就是第二个对象的值,返回的是bool值
一、编译器 “悄悄调用” 重载函数
当代码中出现 == + - * / 时,编译器会根据操作数类型决定:
- 内置类型(如 int、char*):使用预定义的比较逻辑。
- 自定义类型(如 Person 类):调用重载的 operator==。
重载的运算符函数会在使用对应运算符操作自定义类型对象时自动触发。你不需要显式调用 operator==,只需像使用内置类型一样写代码,编译器会处理剩下的细节。这正是运算符重载的优雅之处 —— 让自定义类型 “表现得像内置类型一样自然”。
案例3:运算符重载(+)


在这边我们写实现体的时候,我们需要写一个ret对象去承接x和y的新值,目的就是我们要将值给P3这个对象 ,所以返回值类型都是类,
对象与对象相加会生成一个新的对象,所以我们的返回值类型也是类
让自定义类的对象能通过运算符(如 +)触发预设的函数逻辑,编译器自动处理调用细节,左操作数用 this 隐式传递,右操作数作为参数显式传递。,这个是规定
4. 总结(一句话确认)
p1 + p2 调用 operator+ 后,函数内部创建的 ret 对象会被返回并赋值给 p3,所以 p3 的值完全等于 ret 的值。
核心逻辑:返回的临时对象 ret 是 p3 的 “值来源”,两者的 x、y 完全一致。
函数重载主要有这些好处:
- 提升代码可读性与可维护性:用相同函数名表示功能相近但参数有别的函数,减少命名冲突,让代码更简洁直观。比如处理不同类型数值相加,无需定义addInt addDouble等,统一用add,看函数名和参数就能明白功能。
- 优化代码结构,增强复用性:把功能相似代码集中到同一函数名下,降低重复,提高重用。像不同参数的打印函数print,新增参数类型时,在原函数逻辑扩展,不用重新定义新函数。
- 方便调用:编译器能依据参数自动选最匹配函数,用户无需记多个函数名,传对应参数即可。比如add函数,传int参数就调用int版本,传double就调用double版本 。
- 支持多态与灵活扩展:是实现多态的基础(如 C++ 里),让自定义类型(像Point类)能通过运算符重载,拥有类似内置类型的运算能力,轻松扩展功能,适配不同场景需求。

3280

被折叠的 条评论
为什么被折叠?



