C++:友元

友元是赋予了函数或者类一个访问权限,不是真正的声明

普通友元函数

仅是在类里friend了一个外部函数,并在外部定义实现了它

友元类

在class a1里声明了友元类(friend class a2)不需要再#include“a2.h”, 在class a2里要调用class a1的成员,需要进行#include“a1”

注:不能对两个类所在的头文件相互调用

类的友元成员函数(比较复杂)

  • 先将会被声明为友元的类class a2进行编写,对它的内部函数(会被声明为类的友元成员函数)进行声明,不定义,注意需要对class a1;进行声明可能会在该内部函数声明中使用
  • 将class a1进行编写,因为要声明类的友元成员函数,需要#include"a2" 在类里 friend class::func();
  • 由于不能相互调用,所以在class a2.cpp中进行#include"a1.h", 在对各个a2类中的成员函数进行定义

详情点击这里

补充:
若是本身想调用自己的友元函数,一定要记住友元函数的声明只是一个赋予权限的过程,并非真正的声明
所以想在本身中调用,必须先真正声明该友元

互为友元类:

#include<iostream>
using namespace std;

class People;

class Birth{
	public:
		friend class People;
//		Birth() = default;
//		~Birth() { }
		void getage(People &A);
	private:
		int year = 2019;
		int month = 9;
		int day = 10;
};

class People{
	public:
		friend class Birth;
//		People()=default;
//		~People(){ }
		void getyear(Birth b)
		{
			cout << b.year << endl;
		}
	private:
		int age = 12;
		char sex = 'M';
}; 

void Birth::getage(People &A){
	cout << A.age << endl;
}

int main()
{
	Birth b;
	People p;
	b.getage(p);
	p.getyear(b);
	return 0;
}
posted @ 2019-09-22 17:57  Dedicate_labors  阅读(81)  评论(0编辑  收藏  举报
……