友元
1:友元是单向,当B是A的友元类,A类可通过传递B对象,任意访问类B的成员函数或成员,而B却不能访问A的私用成员;
2:不能被继承;
3:不能被传递;
4:友元的声明,可以在类私用或公用,它们是没区别;
5:友元函数不属于类,但必须在类中声明,类外定义;
友元函数:
#include <iostream>
using namespace std;
class A
{
private:
int i;
friend void set(const int &i, A &a);//声明为友元函数
public:
A():i(0){}
void show(){cout <<"i = " <<i <<endl;}
};
void set(const int &i, A &a)
{
a.i = i;
}
int main(void)
{
A a;
a.show();
set(2, a);
a.show();
return false;
}
友元类:
#include <iostream>
using namespace std;
class B;
class A
{
private:
int i;
public:
A():i(0){}
void show(){cout <<"A : i = " <<i <<endl;}
void test(B &b, const int &i);
};
class B
{
public:
int i;
friend class A;//设置B是A的友元类,A类可通过传递B对象,任意访问类B的成员函数或成员
public:
B():i(0){}
void show(){cout <<"B : i = " <<i <<endl;}
};
void A::test(B &b, const int &i)
{
b.i = i;
b.show();
}
int main(void)
{
A a;
B b;
b.show();
a.test(b, 2);
return false;
}