友元说明

友元机制允许一个类将对其非公有成员的访问权授予指定的函数或类。

必须先定义包含成员函数的类,才能将成员函数设为友元。

只有在先定义类 Screen 之后,才能定义友元函数——毕竟,它被设为友元是为了访问类 Screen 的成员。

另一方面,不必先声明类和非成员函数来将它们设为友元。

友元声明将已命名的类或非成员函数引入到外围作用域。

示例:

a.h

#ifndef A_H
#define A_H
//前置声只能用于定义指向该类型的指针及引用,或者用于声明(而不是定义!!!)使用该类型作为形参类型或返回类型的函数
class B;
class A {
public:
	void frid_for_B(B);
};

#endif

a.cc

#include "a.h"
#include "b.h"

#include <iostream>
using std::cout;
using std::endl;

//只有在定义类 B之后#include "b.h",才能定义友元函数(类A成员函数)!!——毕竟,它被设为友元是为了访问B的成员
void A::frid_for_B(B b) {
    cout << b.i << endl;
    // something..
    b.f_b();
}

b.h

#ifndef B_H
#define B_H
#include "a.h"

class B {
//必须先定义包含成员函数的类#include "a.h",才能将成员函数设为友元
friend void A::frid_for_B(const B);

public:
	void f_b() const;
private:
	int i;
};
#endif

b.cc

#include "b.h"

void B::f_b() const{
}
 
喜欢 0
分享