如题
#include<iostream>
using namespace std;
class person;
class pperson;
class person
{
public:
person() :age(15) {}
friend void setage(person& pp, int age);
friend int pperson::getperage(person& pp);
void showage()
{
cout << age << endl;
}
private:
int age;
};
class pperson
{
public:
pperson(){}
int getperage(person& pp);
};
void setage(person &pp,int age)
{
pp.age = age;
}
int main()
{
person p = person();
setage(p, 20);
pperson pp = pperson();
cout << pp.getperage(p) << endl;
return 0;
}
int pperson::getperage(person& pp)
{
return pp.age;//报错
}
如上 当要访问的类定义在被访问类上面时,会出现不可访问的问题 。但是 交换顺序后即可解决。
#include<iostream>
using namespace std;
class person;
class pperson;
class pperson
{
public:
pperson(){}
int getperage(person& pp);
};
class person
{
public:
person() :age(15) {}
friend void setage(person& pp, int age);
friend int pperson::getperage(person& pp);
void showage()
{
cout << age << endl;
}
private:
int age;
};
void setage(person &pp,int age)
{
pp.age = age;
}
int main()
{
person p = person();
setage(p, 20);
pperson pp = pperson();
cout << " pp.getperage(p) " << pp.getperage(p) << endl;
return 0;
}
int pperson::getperage(person& pp)
{
return pp.age;
}
注意事项:
1、友元函数必须在类外定以,且在类内声明为友元函数
2、友元关系不存在传递性
a是b的友元类,c也是b的友元类,那么不代表a和c为友元类
3、友元类不具有继承性