• 注册
当前位置:1313e > 默认分类 >正文

友元声明和友元定义的相互依赖

当将一个类A的成员函数A::F设置成类B的友元时,需要预先定义类A,否则不能将A::F指定为友元。而在定义B之后,才能定义A::F,因为A::F被设为 友元正是为了访问类B的成员函数。所以,可以按照如下的顺序:

  • 声明类B
  • 定义类A,声明但不实现A::F
  • 定义类B,设置A::F为友元
  • 实现A::F

下面是一个例子:

#include 
#include
using namespace std;class Screen;//前向声明
class Window_Mgr
{
public:void reloacate(Screen& s);
};class Screen
{friend void Window_Mgr::reloacate(Screen& s);//必须先定义Window_Mgr,才能将Window_Mgr::relocate设为友元
public:Screen(int _x, int _y): x(_x), y(_y){};void print(){cout <<"x: " <",y: "<endl;}
private:int x;int y;
};void Window_Mgr::reloacate(Screen& s)
{s.x++;s.y++;
}int main(int argc, char* argv[])
{Screen s(0, 0);Window_Mgr mgr;mgr.reloacate(s);s.print();system("pause");return 0;
}

运行结果如下:

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 162202241@qq.com 举报,一经查实,本站将立刻删除。

最新评论

欢迎您发表评论:

请登录之后再进行评论

登录