C++成员函数做友元的结构问题

在学习与复习 成员函数做友元 时发现在运用成员函数做友元时c++编译器对代码的结构要求比较严格。想要分享分享我遇到的问题以及我的一些理解,并想知道是否有人能解决这个小问题,我的分析未必正确,欢迎讨论。

 定义了两个类GayFriend和building,核心思想是使用 成员函数做友元 使GayFriend能够访问building里的private成员属性bedroom。

 当我先对class GayFriend进行声明,再对class building进行定义并声明 友成员函数 时,显然class building能识别class building,但由于未定义或声明class building内的visit() 函数,可能此时编译器是无法识别成员函数visit()的。此时语法上并无错误(我也不懂为何),但此种结构编写是无法让GayFriend访问bedroom的。

此时我想到,是否能在class GayFriend的声明下进行 成员函数visit()的声明 来解决这个问题。

 但会出现如上图报错,“成员函数void GayFriend::visit();不可在类外声明”,随后我又将该函数的定义移至类内,同样会出现如图报错。从而得出,成员函数不可在类外声明,但可在类外定义的结论。

因此,得出结论:类1(如图中class GayFriend)中的成员函数作为类2(如图中class building)的友元,要对类2私有成员属性进行访问时,类1必须定义在类2之上,类2逻辑上在类1后,才可成功识别类1中的成员函数,并起到友元访问私有属性的作用。正确结构如图所示:

 GayFriend中成员函数可正常访问building中的私有属性bedroom:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值