c++友元函数不能访问私有成员是为什么?

 我来答
刺任芹O
2022-11-16 · TA获得超过6.2万个赞
知道顶级答主
回答量:38.7万
采纳率:99%
帮助的人:8926万
展开全部

因为同样的代码在visual studio2008里能正常编译,但放到VC6.0里却提示不能访问类complex的私有数据成员。根据C++的标准特性,类的友元函数应该允许访问类的私有数据。

当在VC6.0里重载<<和>>时就会出现这种问题,奇怪的是重载别的运算符(如++)时,同样访问了类的私有数据成员,却没有报错。

友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。类授予它的友元特别的访问权。通常同一个开发者会出于技术和非技术的原因,控制类的友元和成员函数(否则当你想更新你的类时,还要征得其它部分的拥有者的同意)。

形式

friend 类型名 友元函数名(形参表);

然后在类体外对友元函数进行定义,定义的格式和普通函数相同,但可以通过对象作为参数直接访问对象的私有成员

说明如下:

1)必须在类的说明中说明友元函数,说明时以关键字friend开头,后跟友元函数的函数原型,友元函数的说明可以出现在类的任何地方,包括在private和public部分;

2)注意友元函数不是类的成员函数,所以友元函数的实现和普通函数一样,在实现时不用"::"指示属于哪个类,只有成员函数才使用"::"作用域符号;

3)友元函数不能直接访问类的成员,只能访问对象成员,

4)友元函数可以访问对象的私有成员,但普通函数不行;

5)调用友元函数时,在实际参数中需要指出要访问的对象,

6)类与类之间的友元关系不能继承。

7)一个类的成员函数也可以作为另一个类的友元,但必须先定义这个类。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式