C++友元函数及友元类的总结

友元

一、简介

  • 友元是一种允许非类的成员函数访问该类的私有成员的一种方式。我们常用的方式用两种—友元函数,友元类。
  1. 友元函数

    友元函数是可以访问类的私有成员的函数。他一般是在类外定义的全局函数,不属于任何类。子啊使用前,需要在待访问的类中申明。声明时需要加上friend关键字。

    格式:friend 数据类型 函数名(类型1 参数1…)

    (在相应的类中申明)

class Animal{
private:
	char sex;
	int  age;
public:	
	Animal(char s,int a){
		sex = s;
		age = a;
	}
	friend void show(Animal &obj); //声明该函数为该类的友元。
};

//全局函数
void show(Animal &obj)
{
	cout << "SEX = " << obj.sex << endl;
	cout << "AGE = " << obj.age << endl;
}

int main()
{
	Animal al('m',2);
	show(al);
}
  1. 友元类

    若是一个类A会频繁的访问另一个类B中的私有成员,那么我们可以把B的私有权限向
    A进行开发,这个开放方式,我们就叫做友元类。及B把A当作好朋友,A可以访问B
    中任何的数据。但是友元不具有传递性,友元为单向开放权限。

    格式:friend class 类名;
    [注意:该类一定要存在,在代码中某个地方定义过]

class girl; //声明girl类

class Person{
private:
	string name;
	int  age;
public:
	void show(){
		
		xxx.
	}
	friend class girl;
};
class girl{
private:
	char sex;
	int  hair_len;
public:
	void show(Person &p){
		cout << "NAME\tAGE\tSEX\tHAIR_LEN" << endl;
		//cout << p.name << endl;
		
	}
	
};

【如上面这段代码中,在申明类girl为类Person的友元时,需要先对girl进行申明,因为它的定义在类person的后面,需要告诉编译器让编译器去找到该类】

​ 【特点】

  1. 友元关系是单向的,不具备交换性。(如:我把你当好朋友,你不一定把我当做好朋友)
  2. 友元函数不具备传递性(如:你是我的好朋友,但是你的好朋友不一定是我的好朋友)
上一篇:c – 如何使一个lambda函数成为类的朋友?


下一篇:利用python实现微信小项目