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. 友元函數不具備傳遞性(如:你是我的好朋友,但是你的好朋友不一定是我的好朋友)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章