怎样在模板类中声明友元函数,然后在类外定义? 10

假如我要定义一个链表模板类,在类里面定义了个Node类作为节点,节点包含了数据和下一节点的指针,然后重载一个输出运算符作为友元函数,如何定义这个类template<cla... 假如我要定义一个链表模板类,在类里面定义了个Node类作为节点,节点包含了数据和下一节点的指针,然后重载一个输出运算符作为友元函数,如何定义这个类
template<class T>
7 class MyList
8 {
9 public:
10 class Node;
11 public:
12 MyList(void):n(0),head(NULL){}
13 ~MyList();
14 bool Empty(void);
15 int Size(void);
16 bool push_back(T d);
17 bool push_front(T d);
18 bool pop_back();
19 bool pop_front();
20 void sort();
21 friend ostream& operator<< <T>(ostream& os,const MyList& l);
22
23 public:
24 class Node
25 {
26 public:
27 Node(T d=T(0),Node* n=NULL):data(d),next(n){}
28 T data;
29 Node* next;
30 };
31 int n;
32 Node* head;
33 };
主要是这个友元函数怎么实现?
展开
 我来答
百度网友9652765
推荐于2018-03-29 · TA获得超过1.5万个赞
知道小有建树答主
回答量:1598
采纳率:84%
帮助的人:194万
展开全部
  1. 程序如下:

  2. template <class T>

    ostream & operator << (ostream &os, const MyList <T> & l)

    {

    ListNode<T> * current = MyList <T> .head;

    while (NULL != current)

    {

    cout << current -> data >> " ";

    current = current -> next;

    }

    return ostream;

    }

  3. 友元函数和普通函数区别:它能够操作类中的私有成员; 

  4. 友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。类授予它的友元特别的访问权。

  5. 类外定义:

    在类的外面进行函数定义。

    如:class Student{public : void display( ); //公用成员函数原型声明private : int num; string name; char sex; //以上3行是私有数据成员};void Student::display( )//在类外定义display类函数{ cout<<"num:"<<num<<endl; cout<<"name:"<<name<<endl; cout<<"sex:"<<sex<<endl;}Student stud1,stud2; //定义两个类对象

    注意:在类体中直接定义函数时,不需要在函数名前面加上类名,因为函数属于哪一个类是不言而喻的。

vincent100金牛
2012-06-14
知道答主
回答量:6
采纳率:0%
帮助的人:5.7万
展开全部
template <class T>
ostream & operator << (ostream &os, const MyList <T> & l)
{
ListNode<T> * current = MyList <T> .head;
while (NULL != current)
{
cout << current -> data >> " ";
current = current -> next;
}
return ostream;
}
1: 为什么你写了那么多的 public, 按照你的 程序, 后面的两个public 都可以不要的;
2:友元函数和普通函数区别 就是它能够操作 类中的私有成员; 你这个在说明它是个模板就可以;
3:friend ostream& operator<< <T>(ostream& os,const MyList& l);
改为 friend ostream& operator<< (ostream& os,const MyList<T>& l);
4:我就认为这样了。。。。
更多追问追答
追问
后面两个public错了,忘改了,我试试,先谢了
追答
恩。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式