C++友元声明与定义依赖关系

#ifndef A_H
#define A_H
#include <iostream>
using std::cout;
using std::endl;
class B;//前向声明
class A
{
public:
	void dis(const B &b);//只是一个成员函数声明,故B无需现在创建,可以用前向声明 class B;
};
#endif

#ifndef B_H
#define B_H
//class A;//因先 #include "A.h" ,再包含 #include "B.h" ,故可以省略前向声明(A已先定义)
class B
{
private:
	int i;
public:
	B(int v):i(v){}
	B():i(0){}


	//友元声明
	friend void A::dis(const B &a);//其它类的成员函数作为友元函数
	friend void test(const B& b);//普通的非成员函数作为友元函数
};
#endif
#ifndef C_H
#define C_H
class C
{
private: 
	int c;
public:
	C(int v):c(v){}
	friend class D;//友元类,只是一个声明,不作为成员一部分,故无需先创建D的定义
};
#endif
#ifndef D_H
#define D_H
#include <iostream>
using std::cout;
using std::endl;
//class C;//因先 #include "C.h" ,再包含 #include "D.h" ,故此语句可以省略
class D
{
public:
	void dis(const C& c)//dis成员函数定义,这里要用到形参C,故C必须先定义完整,所以先#include "C.h"
	{
		cout<<c.c<<endl;
	}
};
#endif
#include <iostream>
#include "A.h"
#include "B.h"
#include "C.h"
#include "D.h"
using namespace std;


void A::dis(const B &b)//必须最后定义,因需要两个类完整定义后,才能定义该成员函数
{
	cout<<b.i<<endl;
}


void test(const B &b)//普通的非成员函数作为友元函数
{
	cout<<b.i<<endl;
}


int main()
{
	//其他类的成员函数作为友元函数
	A a;
	B b(9);
	a.dis(b);




	//普通的非成员函数作为友元函数
	test(b);




	//友元类举例
	C c(10);
	D d;
	d.dis(c);




	system("pause");
	return 0;
}
说明:友元的引入,为了正确地构造类,需要注意友元声明与定义之间的相互依赖。否则会导致编译出错。以上为实例代码,可以借鉴。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值