古枫无涯 2023-04-03 14:53 采纳率: 0%
浏览 49

c++两个类互为友元

两个类互相含有对方的友元成员函数?

class X {
  funcx(Y*); //函数定义,需要访问Y的私有成员
};
class Y {
  friend X::funcx(Y*); //友元授权
}

class Y中的友元授权要放在class X后面,也就是先定义完class X再定义class Y,
class Y { }内容不能放在class X之前。那么如何在class Y中定义访问X私有成员的函数,并在class X中友元授权呢?两个类的先后顺序决定了只能后一个类包含前一个类的友元成员函数,而不能反过来,除非前一个类X中friend class Y; 把整个类Y都设为友元。

class X;
class Y;
class X {
  private:
    int x_value;
  public:
    int funcx(Y* yp); //同时访问X、Y的私有成员,X作为this指针
    //friend int Y::funcy(X* xp); 失败,两类先后顺序问题,只能friend class X
};
class Y {
  private:
    int y_value;
  public:
    int funcy(X* xp); //同时访问X、Y的私有成员,但无权访问X的私有成员
    friend int X::funcx(Y* yp); //友元授权
};

如果友元成员函数对两个类的先后顺序有要求,那么如何同时让两个类都含有对方的友元函数授权呢?

  • 写回答

2条回答 默认 最新

  • OOoOOxty 2023-04-03 15:02
    关注

    如果两个类需要互相访问私有成员,可以考虑将它们的友元成员函数定义在一个单独的全局函数中,并将这个全局函数设为两个类的友元。

    具体来说,可以在两个类之外定义一个全局函数,该函数同时作为X类和Y类的友元函数,并实现对两个类私有成员的访问。例如:

    class X;
    class Y;
    
    int accessXY(X* xp, Y* yp); // 定义全局函数
    
    class X {
    private:
        int x_value;
    public:
        friend int accessXY(X* xp, Y* yp); // 将全局函数设为友元
    };
    
    class Y {
    private:
        int y_value;
    public:
        friend int accessXY(X* xp, Y* yp); // 将全局函数设为友元
    };
    

    这样,在访问X和Y私有成员时,就可以通过调用accessXY()函数来实现了。注意,在定义accessXY()函数时要考虑到X和Y类中私有成员的具体访问方式。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月3日

悬赏问题

  • ¥30 模拟电路 logisim
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价