友元函数在类的内部声明,在类的外部定义,对么?

 我来答
帐号已注销
2020-11-15 · TA获得超过77.1万个赞
知道小有建树答主
回答量:4168
采纳率:93%
帮助的人:168万
展开全部

想让某函数能访问某类的私有成员的时候,把该函数声明为友元,声明方式是在被访问的类声明里声明该函数。

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的友元函数。

参考资料来源:百度百科-友元函数

汽车之路w
高粉答主

2020-11-15 · 关注我不会让你失望
知道大有可为答主
回答量:1.2万
采纳率:100%
帮助的人:298万
展开全部

想让某函数能访问某类的私有成员的时候,把该函数声明为友元,声明方式是在被访问的类声明里声明该函数。

必须在类内部声明,在类外部定义。原因如下:在内部定义函数,要用到其对象,此刻必须定义完整的类,但是类完整定义必须在右花括号出现后,故此刻会编译出错;同时还需要类先定义,再定义友元函数,原因如上。



扩展资料

使用友元函数注意的要点:

1、类中通过使用关键字friend 来修饰友元函数,但该函数并不是类的成员函数,其声明可以放在类的私有部分,也可放在共有部分。友元函数的定义在类体外实现,不需要加类限定。

2、一个类中的成员函数可以是另外一个类的友元函数,而且一个函数可以是多个类友元函数。

3、友元函数可以访问类中的私有成员和其他数据,但是访问不可直接使用数据成员,需要通过对对象进行引用。

4、友元函数在调用上同一般函数一样,不必通过对对象进行引用。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
飘然还文雅的赤子b
2016-01-02 · TA获得超过1.6万个赞
知道大有可为答主
回答量:2484
采纳率:88%
帮助的人:714万
展开全部
是正确的,详细如下。
友元函数有两种,一种不属于任何类的,这种其实和c的外部函数一样属于全局函数!一种是其他某个类的成员函数!只有全局性质的友元函数才会直接定义在类的内部!友元函数虽然不是类的成员函数,却是类的接口!和类关系密切,所以可以定义在类的内部!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
新泥称
推荐于2018-03-08 · TA获得超过339个赞
知道答主
回答量:216
采纳率:75%
帮助的人:24.9万
展开全部
在类内声明, 可在类内外实现,
就是个普通函数 或 别的类的成员函数.
用friend 声明后(告诉编译器 这函数有权访问本类的私有成员).. ...
就像朋友 可以进出我的家,不管这朋友来自哪里,反正就是朋友
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
笃侠6A
2014-06-18 · TA获得超过3734个赞
知道大有可为答主
回答量:3205
采纳率:75%
帮助的人:3272万
展开全部
对的。是这样的。
更多追问追答
追问
那在请问一下必须在类的说明中说明友元函数,友元函数的说明可以出现在类的任何地方,这个和刚才那个不矛盾么,这个有些不理解
追答
应该是 友元函数的说明可以出现在  类内  的任何地方。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式