【问题标题】:how to overload + operator to add two queues?如何重载 + 运算符来添加两个队列?
【发布时间】:2021-08-29 14:49:26
【问题描述】:

我想添加我定义的两个队列,我的重载方法有什么问题? 我已经尝试过运算符重载的确切语法,但它不起作用! 这些队列是动态数组,我们在 Queue 类中为它们定义了一些操作符

#include <iostream>
using namespace std; 
    
class Queue { 
    int size; 
    int* queue; 
    
public:
    Queue() { 
        size = 0;
        queue = new int[100];
    }
    void add(int data) { 
        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;
    }

    Queue operator + (Queue &q1 , Queue &q2 ) {
        Queue q3 = q1 + q2;
        return q3;
    }
}; 
    

主要:

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

【问题讨论】:

  • 你自己引用了自身内部的操作符。
  • 这个网站展示了一个如何重载 operator+ 来添加类的例子:cprogramming.com/tutorial/operator_overloading.html
  • 这是一个sololearn.com的任务,只需要iostream库就可以了,所以没有新库是前提。

标签: c++ oop operators overloading que


【解决方案1】:

操作符可以这样定义

#include <stdexcept>
#include <algorithm>

//...

class Queue
{
    //...
    friend Queue operator + ( const Queue &q1 , const Queue &q2 ) noexcept( false )
    {
        if ( not ( q1.size + q2.size <= 100 ) ) throw std::out_of_range( "Too big queues" );

        Queue q3;

        std::copy( q1.queue, q1.queue + q1.size, q3.queue );
        std::copy( q2.queue, q2.queue + q2.size, q3.queue + q1.size );

        q3.size = q1.size + q2.size;

        return q3;
    }
};

请注意,您需要明确定义析构函数和复制构造函数以及复制赋值运算符。

【讨论】:

猜你喜欢
  • 2010-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多