【发布时间】:2021-04-15 01:37:29
【问题描述】:
这是我的代码。我创建了使用操作重载添加两个队列的函数。对于某些共振,它总是返回一个空
#include <iostream>
using namespace std;
class Queue {
int size;
int* queue;
public:
Queue() {
size = 0;
queue = new int[100];
}
//adds an item to the queue`enter code here`
void add(int data) {
queue[size] = data;
size++;
}
//removes an item from the queue
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--;
}
}
// a function to display the queue
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 &obj){
Queue res;
res.queue = *queue + obj.queue;
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;
}
【问题讨论】:
-
*queue + obj.queue这并不像您所相信的那样连接两个整数数组。这需要一个指针obj.queue,将它增加整数*queue(显然是队列中的第一个元素),然后返回结果指针。基本上,它没有任何意义——你只是偶然发现了一个恰好编译的无意义的表达式。 -
您对指针和内存分配如何工作的理解根本不正确。显示的代码需要从根本上以多种方式重写。没关系,每个人都必须在某个时候学习这个,但是学习这个的最好方法是继续阅读和学习你的教科书,并尝试它的练习程序。不幸的是,Stackoverflow 不能替代您的教科书。
-
哦,谢谢...我是新手,刚刚开始学习指针和内存分配。可能我需要了解更多关于这个主题的信息
-
先生,您能告诉我如何使用运算符重载添加两个队列
标签: c++ pointers queue operator-overloading