[C++]【类】友元的三种声明及注意事项

类容许其余类或者函数访问它的非公有成员,但咱们须要将访问类非公有成员的其余类或者函数成为它的友元。
1、友元函数
  若是类想要把一个函数做为他的友元,只须要增长一条以 friend 关键字开始的函数声明语句便可。
例如:函数

class A{
    friend void fri_fun(A);
private:
    int a=9;
};
void fri_fun(A aa){
    cout<<aa.a<<endl;
}

  在代码中,咱们在类 A 中声明了函数 fri_fun ,并以 friend 关键字加以说明,此时咱们能够在函数 fri_fun 中访问 A 类的私有成员。
  友元的声明仅仅指定了访问的权限,而非一个一般意义上的函数声明。若是咱们但愿类的用户能过调用某个友元函数,那么咱们就必须在友元声明以外再专门对函数进行声明。
  一些编译器容许在尚无友元函数的初始声明的状况下就调用它。即便这样,也最好仍是提供一个独立的函数声明。
2、友元类
  友元类也须要 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 的前向声明。
 class

相关文章
相关标签/搜索