求改程序C++

来源:百度知道 编辑:UC知道 时间:2024/07/02 20:52:57
template <typename Type> class QueueItem {
QueueItem(const Type &t): item(t), next(0) { }
Type item;
QueueItem *next;
};

template <typename Type> class Queue {
public:
Queue(): head(0), tail(0) { }
Queue(const Queue &Q): head(0), tail(0) { copy_elems(Q); }
Queue& operator=(const Queue&);
~Queue() { destroy(); }
Type& front() { return head->item; }
const Type &front() const { return head->item; }
void push(const Type &);
void pop();
bool empty() const { return head == 0; }
private:
QueueItem<Type> *head;
QueueItem<Type> *tail;
void destroy();
void copy_elems(const Queue&);
};

template <typename Type> //这个函数有问题 上面是他的类 下面是需要的实现函数
Queue& Queue<Type>::operator=(const Queue &temp)
{
destroy();
copy_elems(temp);
return *this;
}

因为,你返回类的类型是Queue<Type>而不是Queue;
其实在你在一开始定义的模板就是Queue<Type>而不是Queue
然后在main 中你声明的也是Queue<Type>,而不是Queue
其实你眼中的Queue根本就不存在!不要惊讶,这是真的!
为了验证Queue<Type>与Queue是不同的
我编了以下的程序
#include<iostream>
#include<typeinfo>
using namespace std;

class myclass{};

template <class test>
class myclass2{};

int main(){
myclass a;
myclass2<int> b;

cout<<"typeid(myclass a).name() is "<<typeid(a).name()<<endl;
cout<<"typeid(myclass2<int> b).name() is "<<typeid(b).name()<<endl;

system("Pause");
return 0;
}
程序有些蹩脚,但是模板类类型与一般的类类型是不同,看起来一样,但实际上是有很大区别的。
希望我的回答对你有一些帮助

注意:这个类的名字就叫Queue<Type>,而不是Queue或者其他的任何东西。

“Queue<Type>”在这里是一个完整的类型名,而“Queue”这个名字什么也不是。

因为它返回的是一个模板~~~这个模板还是得由Type来定类型。