1.
我们希望可以在类B中直接设置类A的私有或保护成员变量的值。
class A
{
private:
int data;
};
class B
{
private:
A * a;
private:
void setData(int value)
{
a->data = value;
}
};
这样写是不行的:
这样写就可以了:
class A
{
private:
int data;
friend class B;
};
class B
{
private:
A * a;
private:
void setData(int value)
{
a->data = value;
}
};
这样B就是A的友元类了,B是A的朋友,所以B可以直接访问A的private和protected成员。
2.
友元函数
允许一个函数不需要通过类的public接口就能够访问到类中的private和protected成员
class A
{
private:
int data;
friend void setData(A * a,int value);
};
void setData(A * a,int value)
{
a->data = value;
}
3.类中的友元函数:
class A;
class B
{
private:
A * a;
private:
void setData(int value);
};
class A
{
private:
int data;
friend void B::setData(int value);
};
void B::setData(int value)
{
a->data = value;
}
这样写的话:
A是无法访问B的setData函数的
需改成:
class A;
class B
{
private:
A * a;
public:
void setData(int value);
};
class A
{
private:
int data;
friend void B::setData(int value);
};
void B::setData(int value)
{
a->data = value;
}
public:
void setData(int value);