想让某函数能访问某类的私有成员的时候,把该函数声明为友元,声明方式是在被访问的类声明里声明该函数。
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;
}
扩展资料:
假设f是想正确声明的函数,c是和它相关的类:
虚函数必须是成员函数。如果f必须是虚函数,就让它成为c的成员函数。
operator>>;和operator<<;决不能是成员函数。如果f是operator>>;或operator<<;,让f成为非成员函数。如果f还需要访问c的非公有成员,让f成为c的友元函数。
只有非成员函数对最左边的参数进行类型转换。如果f需要对最左边的参数进行类型转换,让f成为非成员函数。如果f还需要访问c的非公有成员,让f成为c的友元函数。
参考资料来源:百度百科-友元函数
想让某函数能访问某类的私有成员的时候,把该函数声明为友元,声明方式是在被访问的类声明里声明该函数。
必须在类内部声明,在类外部定义。原因如下:在内部定义函数,要用到其对象,此刻必须定义完整的类,但是类完整定义必须在右花括号出现后,故此刻会编译出错;同时还需要类先定义,再定义友元函数,原因如上。
扩展资料
使用友元函数注意的要点:
1、类中通过使用关键字friend 来修饰友元函数,但该函数并不是类的成员函数,其声明可以放在类的私有部分,也可放在共有部分。友元函数的定义在类体外实现,不需要加类限定。
2、一个类中的成员函数可以是另外一个类的友元函数,而且一个函数可以是多个类友元函数。
3、友元函数可以访问类中的私有成员和其他数据,但是访问不可直接使用数据成员,需要通过对对象进行引用。
4、友元函数在调用上同一般函数一样,不必通过对对象进行引用。
本回答被网友采纳那在请问一下必须在类的说明中说明友元函数,友元函数的说明可以出现在类的任何地方,这个和刚才那个不矛盾么,这个有些不理解
追答应该是 友元函数的说明可以出现在 类内 的任何地方。
追问明白了明白了,谢谢指点