参考:https://www.runoob.com/cplusplus/cpp-overloading.html
可重载的运算符
双目算术运算符 | + (加),-(减),*(乘),/(除),% (取模) |
---|---|
关系运算符 | ==(等于),!= (不等于),< (小于),> (大于),<=(小于等于),>=(大于等于) |
逻辑运算符 | ||(逻辑或),&&(逻辑与),!(逻辑非) |
单目运算符 | + (正),-(负),*(指针),&(取地址) |
自增自减运算符 | ++(自增),–(自减) |
位运算符 | | (按位或),& (按位与),~(按位取反),^(按位异或),,« (左移),»(右移) |
赋值运算符 | =, +=, -=, *=, /= , % = , &=, |=, ^=, «=, »= |
空间申请与释放 | new, delete, new[ ] , delete[] |
其他运算符 | ()(函数调用),->(成员访问),,(逗号),[](下标) |
不可重载的运算符
- .:成员访问运算符
- .*, ->*:成员指针访问运算符
- :::域运算符
- sizeof:长度运算符
- ?::条件运算符
- #: 预处理符号
例子
重载操作符():
leetcode: 合并k个有序列表
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: struct comp{ bool operator()(ListNode* a,ListNode* b){ return a->val > b->val; } }; priority_queue<ListNode*,vector<ListNode*>,comp> q; ListNode* mergeKLists(vector<ListNode*>& lists) { for(auto node:lists){ if(node) q.push(node); } ListNode* head=new ListNode(); ListNode* tail=head; while(!q.empty()){ ListNode* node=q.top(); q.pop(); tail->next=node; tail=tail->next; if(node->next) q.push(node->next); } return head->next; } };
文档信息
- 本文作者:weownthenight
- 本文链接:https://weownthenight.github.io/2022/02/14/C++-%E6%93%8D%E4%BD%9C%E7%AC%A6%E9%87%8D%E8%BD%BD/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)