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

如题所述

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

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个回答  2020-11-15

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

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



扩展资料

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

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

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

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

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

本回答被网友采纳
第2个回答  2016-01-02
是正确的,详细如下。
友元函数有两种,一种不属于任何类的,这种其实和c的外部函数一样属于全局函数!一种是其他某个类的成员函数!只有全局性质的友元函数才会直接定义在类的内部!友元函数虽然不是类的成员函数,却是类的接口!和类关系密切,所以可以定义在类的内部!
第3个回答  推荐于2018-03-08
在类内声明, 可在类内外实现,
就是个普通函数 或 别的类的成员函数.
用friend 声明后(告诉编译器 这函数有权访问本类的私有成员).. ...
就像朋友 可以进出我的家,不管这朋友来自哪里,反正就是朋友本回答被网友采纳
第4个回答  2014-06-18
对的。是这样的。追问

那在请问一下必须在类的说明中说明友元函数,友元函数的说明可以出现在类的任何地方,这个和刚才那个不矛盾么,这个有些不理解

追答

应该是 友元函数的说明可以出现在 类内 的任何地方。

追问

明白了明白了,谢谢指点

友元函数在类的内部声明,在类的外部定义,对么?
想让某函数能访问某类的私有成员的时候,把该函数声明为友元,声明方式是在被访问的类声明里声明该函数。template <class T> ostream & operator << (ostream &os, const MyList <T> & l){ ListNode<T> * current = MyList <T> .head;while (NULL != current){ cout << current -> da...

C++多选题,关于友元函数的?
友元函数不是类的一部分,所以A、B都错。友元函数在类内声明,在类外定义,声明时需加friend关键字且可以不指定形参名,但定义时不能加friend关键字,所以C也是错的。选ABC。

在类内声明友元,在类外写友元函数,在使用类内的成员变量时却提示 类内...
友元函数有两种,一种不属于任何类的,这种其实和c的外部函数一样属于全局函数!一种是其他某个类的成员函数!只有全局性质的友元函数才会直接定义在类的内部!友元函数虽然不是类的成员函数,却是类的接口!和类关系密切,所以可以定义在类的内部!

友员函数怎么定义
然后在类体外对友元函数进行定义,定义的格式和普通函数相同,但可以通过对象作为参数直接访问对象的私有成员 友元函数说明如下 :1)必须在类的说明中说明友元函数,说明时以关键字friend开头,后跟友元函数的函数原型,友元函数的说明可以出现在类的任何地方,包括在private和public部分;2)注意友元函数不是...

下面对于友元函数描述正确的是( )。
【答案】:C 友元函数的定义既可以在类内部进行,也可以在类外部进行。它提高了程序的运行效率,但破坏了类的封装性和隐藏性,使得类的非成员函数可以访问类的私有成员。

友元函数的作用
友元是一种定义在类外部的普通函数,但需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以关键字friend。友元不是成员函数,但是可以访问类中的私有成员。友元的作用在于提高程序的运行效率,但是,破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。友元可以是一个函数,...

友元函数有什么作用?
友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend,其格式如下:friend 类型 函数名(形式参数);友元函数的声明可以放在类的私有部分,也可以放在公有部分,它们是没有区别的,都说明...

什么叫友元函数?
友元函数是定义在类外部的函数,但需要在类的声明中明确指定为友元,格式为 "friend 类型 函数名(参数列表)",可以放置在类的私有或公有部分。一个函数可以成为多个类的友元,只需在每个类中分别声明。友元类则更为直接,它的所有成员函数都自动成为其他类的友元,能访问这些类的私有和保护成员。如果...

Friend问题提出
友元,是一种特殊的函数或类,它们定义在类的外部,但需要在类体内声明,通常使用`friend`关键字来标识。友元虽非类的成员,但它们被赋予了访问类私有成员的权限。友元的主要目的是为了优化程序性能,但它同时也破坏了封装性和隐藏性,允许非成员函数直接访问类的私有信息。友元可以有多种形式,包括友元...

C++语法糖(friend关键字)详解以及示例代码
这种关系不限于继承关系,允许不同类之间的紧密协作。总的来说,"friend"关键字为C++提供了灵活性,允许在一定程度上打破封装原则。友元函数和友元类的声明通常需要在被访问类的定义内,但其实现可以在类定义的外部完成。然而,使用时需要谨慎,过度依赖友元可能会导致代码的可读性和可维护性降低。

相似回答