You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何重载+运算符实现两个自定义队列相加,现有重载写法存在什么问题?

现有代码的核心问题

  • 二元运算符重载语法错误:类内定义operator+作为成员函数时,只能接收1个参数,左操作数默认是当前类实例(this指向的对象),你定义了2个参数不符合语法要求,编译器会直接报错。如果要保留两个参数的写法,需要将该运算符重载声明为类的友元函数,放到类外部定义。
  • 逻辑死循环:你写的operator+内部直接执行q1 + q2,相当于无限递归调用当前的operator+函数,没有任何合并队列的实际逻辑,运行后会直接栈溢出崩溃。
  • 补充隐患:当前Queue类没有定义析构函数释放new申请的动态数组,会产生内存泄漏。

修正后的实现代码

你可以按下面的方式修改运算符重载部分,逻辑是把左队列的所有元素先加入新队列,再把右队列的所有元素追加到新队列末尾,完成两个队列的拼接:

#include <iostream>
using namespace std; 
    
class Queue { 
    int size; 
    int* queue; 
    
public:
    Queue() { 
        size = 0;
        queue = new int[100];
    }
    // 补充析构函数避免内存泄漏
    ~Queue() {
        delete[] queue;
    }
    void add(int data) { 
        // 简单判断避免数组越界,当前最多支持100个元素
        if (size >= 100) {
            cout << "Queue is full" << endl;
            return;
        }
        queue[size] = data; 
        size++;
    }
    void remove() { 
        if (size == 0) { 
            cout << "Queue is empty" << endl; 
            return; 
        } 
        else { 
            for (int i = 0; i < size - 1; i++) { 
                queue[i] = queue[i + 1]; 
            } 
            size--; 
        } 
    } 
    void print() { 
        if (size == 0) { 
            cout << "Queue is empty" << endl; 
            return; 
        } 
        for (int i = 0; i < size; i++) { 
            cout << queue[i] << " <- ";
        } 
        cout << endl;
    }

    // 类内成员函数重载operator+,仅需1个参数,左操作数为当前对象
    Queue operator+(const Queue &other) const {
        Queue res;
        // 先加入当前队列的所有元素
        for (int i = 0; i < size; i++) {
            res.add(queue[i]);
        }
        // 再加入另一个队列的所有元素
        for (int i = 0; i < other.size; i++) {
            res.add(other.queue[i]);
        }
        return res;
    }
}; 

int main() {
    Queue q1;
    q1.add(42); q1.add(2); q1.add(8);  q1.add(1);
    Queue q2;
    q2.add(3); q2.add(66); q2.add(128);  q2.add(5);
    Queue q3 = q1 + q2;
    q3.print();
    return 0;
}

运行后输出结果为:42 <- 2 <- 8 <- 1 <- 3 <- 66 <- 128 <- 5 <- ,符合队列相加的预期。

内容的提问来源于stack exchange,提问作者sasanace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 21:24:04