本文共 970 字,大约阅读时间需要 3 分钟。
类允许其他类或者函数访问它的非公有成员,但我们需要将访问类非公有成员的其他类或者函数成为它的友元。
一、友元函数
如果类想要把一个函数作为他的友元,只需要增加一条以 friend 关键字开始的函数声明语句即可。
例如:
class A{
friend void fri_fun(A);
private:
int a=9;
};
void fri_fun(A aa){
cout<
}
在代码中,我们在类 A 中声明了函数 fri_fun ,并以 friend 关键字加以说明,此时我们可以在函数 fri_fun 中访问 A 类的私有成员。
友元的声明仅仅指定了访问的权限,而非一个通常意义上的函数声明。如果我们希望类的用户能过调用某个友元函数,那么我们就必须在友元声明之外再专门对函数进行声明。
一些编译器允许在尚无友元函数的初始声明的情况下就调用它。即使这样,也最好还是提供一个独立的函数声明。
二、友元类
友元类也需要 friend 关键字加以说明。
例如:
class B{
friend class A;
int s=9;
};
class A {
public:
void aa(B c) {
cout << c.s << endl;
}
};
类 A 的成员函数可以访问类 B 的私有成员。
注意:如果我们把类 A 放在类 B 的前边,此时编译会出错,因为在编译类 A 时,我们并没有定义类 B。
我们也可以将成员函数作为另一个类的友元,我们将上一个代码更改,仅仅让类 A 的成员函数 aa 可以访问类 B 的私有成员:
class B;
class A{
public:
void aa(B c);
};
class B{
friend void A::aa(B);
int s=9;
};
void A::aa(B c){
std::cout << c.ss << std::endl;
}
我们将类 A 的成员函数 aa 作为类 B 的友元函数,这是我们必须在类 B 之前声明函数 aa (我们的代码,在类 A 中已经声明),在类 B 之后定义(如果用到类 B 的成员),在友元声明中我们必须指明该函数属于哪一个类。
在类 A 中,成员函数 aa 的形参包含 B 类类型元素,所以在类 A 之前,必须有类 B 的前向声明。
转载地址:http://nutto.baihongyu.com/