本文写了友元函数,友元成员和友元类。
所有的访问其他类的友元函数,必须在被访问的类之后定义,这一点是在VS上出现的,貌似g++不是这样的。Mark下,不然自己写的时候很困惑!
#include<iostream>
using namespace std;
class Screen;
//友元类
class Window_Mgr
{
public:
Window_Mgr(){};
~Window_Mgr(){};
Window_Mgr& relocate(int r, int c, Screen &s);
};
class WindBase
{
public:
int getScreenWeight(Screen &s);
};
class Screen
{
private:
int height;
int weight;
public:
Screen(int height=0, int weight=0) : height(height), weight(weight){}
friend class Window_Mgr;//声明Window_Mgr为Screen的友元类
friend void locate(int r, int c, Screen &s);
friend int WindBase::getScreenWeight(Screen &s);
};
//无语了,VC++非要把这个友元函数放到被添加友元类的后面,
void locate(int r, int c, Screen &s)
{
s.height += r;
s.weight += c;
}
int WindBase::getScreenWeight(Screen &s)
{
return s.height;//VS2013还提示不能访问,也是醉了,还好我及时百度,才发现问题
}
//无语了,VC++非要把友元函数放到被添加友元类的后面
Window_Mgr & Window_Mgr::relocate(int r, int c, Screen &s)
{
s.height += r;
s.weight += c;
return *this;
}
int main()
{
//Screen s;
return 0;
}