友元

友元

友元为类外的函数,和其他类的成员函数提供了一种可以访问类内私有变量的方式。

友元函数

 如果一个函数想访问类中的私有成员变量,那他得先被声明为该类的友元(friend + 函数声明)。友元函数并非是类的函数成员,所以它不受说在区域访问控制级别的限制,但是一般声明在public:,声明之前。
 要注意,友元声明并不是声明,所以最好还在类所在的头文件之外进行第二次声明(然后顺理成章的和类的成员函数们定义在一起)。
 再者,友元函数的定义可以写在类内部,以实现隐式内联。即便如此也得在类外再次声明。

Problem

问题描述:已知可以将类或者类内成员函数声明为友元,比如将classA声明为classB的友元,假设他们有单独的头文件,classA在声明classB的友元函数时,必须得知道classB存在,而classB在将classA声明为它的友元时,也得早知道classA存在,那他们的头文件该如何#include?

//classA.h
class classB;
class classA
{
	void funcfriendB(classB Pro1);
}

 在classA的头文件中,对于友元函数funcfriendB()而言,仅仅是存在声明,并不定义,也就不会有关于classB中数据访问的内容,所以在classA的头文件中只需要声明classB是个啥就行:class classB;

//classA.c
#include "classB.h"
void classA::funcfriendB(classB Pro1)
{...}

 但是在classA的实现时,因为要访问类中数据,所以这时就要#include"classB.h"

//classB.h
#include"classA.h"
class classB
{
	friend class classA;
	//friend void classA::funcfriendB(classB Pro1);
}

 这里要#include"classA.h"以为友元类classA和友元函数funcfriendB()提供声明 。
 这样就可以避免因为头文件互相包含导致的重定义问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值