C++运算符重载

运算符重载允许你为自定义类型(如类或结构体)定义已有的运算符的行为,使其像内置类型一样进行直观操作。其核心语法格式如下:

返回类型 operator 运算符(参数列表) { // 重载的实现 }

这里的 operator是关键字。运算符重载函数通常作为类的​​成员函数​​或​​友元函数(非成员函数)​​ 实现,两者格式有细微差别。

1. 作为成员函数重载

当重载为类的成员函数时,二元运算符的参数列表通常只需一个参数(右操作数),左操作数默认为该类对象本身(通过 this指针访问)。一元运算符通常不需要参数。

~~~cpp

class ClassName {

public:

// 二元运算符(例如 +)

返回类型 operator运算符(类型 右操作数) {

// 实现代码

}

// 一元运算符(例如 -)

返回类型 operator运算符() {

// 实现代码

}

};

~~~

2. 作为友元函数(非成员函数)重载

某些运算符(如输入 >>和输出 <<运算符)必须重载为非成员函数,通常声明为类的 friend以便访问私有成员。此时,参数列表通常需要两个参数,分别表示左、右操作数。

~~~cpp

class ClassName {

public:

// 声明友元函数

friend 返回类型 operator运算符(类型 左操作数, 类型 右操作数);

};

// 在类外定义

返回类型 operator运算符(类型 左操作数, 类型 右操作数) {

// 实现代码

}

~~~

全部评论

相关推荐

点赞 评论 收藏
分享
08-28 22:33
已编辑
门头沟学院 C++
有三个项目三个实习,但全程几乎没问任何实习、项目、八股。1.&nbsp;如何让一个数字快速对&nbsp;512&nbsp;取模?可以与(512-1)做按位与。2.&nbsp;如果是任意数字呢,在不用取模和除法的条件下,实现&nbsp;n%m?可以使用&nbsp;n&nbsp;不断减去&nbsp;m,但这样复杂度很高,因此可以用二分优化。3.&nbsp;还有更好的办法么?感觉想不出更好的方法,如果&nbsp;m&nbsp;是&nbsp;2&nbsp;的整数次幂可以用刚刚类似的方法。4.&nbsp;代码写一下吧(还有很多额外的限制记不清楚了,比如不能用任何超过&nbsp;32&nbsp;位长度的类型)写的二分但是没有写完,写到一半面试官说算了这个问题过吧(感觉想要的不是二分而是更好的办法)5.&nbsp;一个三万个节点的链表如何找到第两万大?一开始想错了说要放到数组用&nbsp;select&nbsp;算法,后来反应过来说直接对链表用&nbsp;select&nbsp;,说了一遍过程。6.&nbsp;这样会破坏原始链表结构,有办法不破坏么可以把每次下一阶段需要的链表额外存下来,但最坏情况下需要额外的三万空间。7.这样会使得使用的空间更多,有更好的办法么?可以用优先队列,只用两万的空间,然后说了一下用优先队列的方案,核心就是两万了以后,再加进来的时候和堆顶元素对比下就行,不会超过两万。8.&nbsp;&nbsp;空间还能比两万更少么?(尝试说了一些,没有答到点上,面试官直接说算了)9.&nbsp;你知道内存池的作用么,为什么需要内存池?八股直接回答10.如果让你实现内存池你会怎么实现,要求能动态调整池大小?(回答了一些自己的思路,基本就是链表,想了很多种优化加上去。)11.&nbsp;用&nbsp;c++实现你刚刚说的思路,不一定能运行伪代码就可以。(c++大概写了一下但是写的很差被找出来很多问题,比如这是内存池里面链表的维护不能用&nbsp;new)反问环节:1.&nbsp;假如我能被录取,希望我承担什么工作?答:&nbsp;这个问题问的太早了。
落媛媛:同学,瞅瞅我司,医疗独角兽,校招刚开,名额有限,先到先得,我的主页最新动态,绿灯直达,免笔试~
查看12道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务