16.4.4 Queue和QueueItem的友元声明
1. 将类模板设为友元
template
class QueueItem
{
QueueItem(const Type &t):item(t), next(0){}
Type item;
QueueItem *next;
friend class Queue
};
template
class QueueItem
{
QueueItem(const Type &t):item(t), next(0){}
Type item;
QueueItem *next;
friend class Queue
};2. Queue输出操作符
template
ostream& operator<<(ostream &os, const Queue
{
os<<"< ";
QueueItem
for(p=q.head;p!=0;p=p->next)
{
os<
}
os<<">";
return os;
}
template
ostream& operator<<(ostream &os, const Queue
{
os<<"< ";
QueueItem
for(p=q.head;p!=0;p=p->next)
{
os<
}
os<<">";
return os;
}3. 将函数模板设为友元
template
class QueueItem
{
Type item;
QueueItem *next;
QueueItem(const Type &t):item(t), next(0){}
friend class Queue
friend ostream &operator<<
};
template
class QueueItem
{
Type item;
QueueItem *next;
QueueItem(const Type &t):item(t), next(0){}
friend class Queue
friend ostream &operator<<
};template
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;}
friend ostream &operator<<
private:
QueueItem
QueueItem
void destroy();
void copy_elems(const Queue&);
};
template
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;}
friend ostream &operator<<
private:
QueueItem
QueueItem
void destroy();
void copy_elems(const Queue&);
};4. 类型依赖性与输出操作符
绑定到Queue且使用Queue输出操作符的每种类型本身必须有输出操作符。
摘自 xufei96的专栏