template<typename Type> class SingleList;
template<typename Type> class ListNode
{
private:
friend typename SingleList<Type>;
ListNode():m_pnext(NULL){}
ListNode(const Type item,ListNode<Type> *next=NULL):m_data(item),m_pnext(next){}~ListNode()
{
m_pnext=NULL;
}
public:
Type GetData();
friend ostream& operator<< <Type>(ostream& ,ListNode<Type>&);
private:
Type m_data;
ListNode *m_pnext;
};
template<typename Type> Type ListNode<Type>::GetData()
{
return this->m_data;
}
template<typename Type> ostream& operator<<(ostream& os,ListNode<Type>& out)
{
os<<out.m_data;
return os;
}
这个模版中的friend ostream& operator<< <Type>(ostream& ,ListNode<Type>&);是什么意思呢。请各位帮我解释一下。谢谢
------解决方案--------------------------------------------------------
重载输出运算符
------解决方案--------------------------------------------------------
friend ostream& operator<< <Type>(ostream& ,ListNode<Type>&);
friend是声明这个函数时友元函数,
中间的<Type>这个是模板了,
这个函数就是重载<<(输出)运算符,参数是分别输出流和ListNode<Type>型的参数,函数返回输出流。
template<typename Type> ostream& operator<<(ostream& os,ListNode<Type>& out)
{
os<<out.m_data;
return os;
}
当编译器遇到表达式cout<<ListNodeObject时,会生成调用来调用:operate<<(cout,ListNodeObject)
------解决方案--------------------------------------------------------
这位老兄蛮认真的,解析的蛮详细