C++ 操作符重载

2022/02/14 C++ 共 1158 字,约 4 分钟

参考:https://www.runoob.com/cplusplus/cpp-overloading.html

可重载的运算符

双目算术运算符+ (加),-(减),*(乘),/(除),% (取模)
关系运算符==(等于),!= (不等于),< (小于),> (大于),<=(小于等于),>=(大于等于)
逻辑运算符||(逻辑或),&&(逻辑与),!(逻辑非)
单目运算符+ (正),-(负),*(指针),&(取地址)
自增自减运算符++(自增),–(自减)
位运算符| (按位或),& (按位与),~(按位取反),^(按位异或),,« (左移),»(右移)
赋值运算符=, +=, -=, *=, /= , % = , &=, |=, ^=, «=, »=
空间申请与释放new, delete, new[ ] , delete[]
其他运算符()(函数调用),->(成员访问),,(逗号),[](下标)

不可重载的运算符

  • .:成员访问运算符
  • .*, ->*:成员指针访问运算符
  • :::域运算符
  • sizeof:长度运算符
  • ?::条件运算符
  • #: 预处理符号

例子

  1. 重载操作符():

    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;
        }
    };
    

文档信息

Search

    Table of Contents