当前位置: 代码迷 >> C++ >> friend ostream& operator<< <Type>(ostream& ,ListNode<Type>&);解决方案
  详细解决方案

friend ostream& operator<< <Type>(ostream& ,ListNode<Type>&);解决方案

热度:8081   发布时间:2013-02-26 00:00:00.0
friend ostream& operator<< <Type>(ostream& ,ListNode<Type>&);
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)
------解决方案--------------------------------------------------------
引用:
friend ostream&amp; operator<< <Type>(ostream&amp; ,ListNode<Type>&amp;);
friend是声明这个函数时友元函数,
中间的<Type>这个是模板了,
这个函数就是重载<<(输出)运算符,参数是分别输出流和ListNode<Type>型的参数,函数返回输出流。

C/C++ code

template<typen……


这位老兄蛮认真的,解析的蛮详细
  相关解决方案