程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C/C++ 初學簡單筆記 —2.1— 類的友元

C/C++ 初學簡單筆記 —2.1— 類的友元

編輯:C++入門知識

類的友元。

C++為解決效率的需要,提出了一個友元的概念。

只要把某個類外函數聲明為該類的友元,就可以直接訪問類中的任何成員(public,protect,private)

也就相當於說,開放了一個後門,既然是開後門,那麼自然是在該類裡面說明。

所以,所有的友元聲明都應該在該類中。


1)將普通函數聲明為類的友元,

如:
class A
{
private:
int id;
friend void display(A &a); // 開了一個後門給 display
};
void display(A &a)
{
cout<

};


2)將某個類聲明為本類的友元類

如:
class A
{
private:
int id;
friend class B;
};
class B
{
public:
static void showA(A &a)
{
cout< }

};


3)將某個類的成員函數聲明為本類的友元函數, 開放權限給某個成員函數

參考代碼如下:
#include

using namespace std;

class A; // 因為在類A的定義之前,類B用到了A,所以要先在這裡做引用性聲明

class B
{
public:
void showA(A &a);
};

class A
{
private:
int id;
public:
A(int id):id(id){};

// 注意:開放給其他類,那麼其他類必須在此前已經有完整定義了!
friend void B::showA(A &a); // 要通過‘::’運算符表示開放權限給哪個類的成員函數
};

// 友元的成員函數,必須定義在該類的後面,不然找不到A的定義
void B::showA(A &a)
{
cout< }

int main()
{
A a(1);
B b;
b.showA(a);
return 0;
}


1)友元都聲明在類中,只是說明友元函數,友元類有權訪問類的所有成員,但並不表明友元函數和友元類屬於該類的成員。

2) 友元聲明不受權限的限制,聲明在哪一行都行。

3)用friend 修飾,一般使用對象的別名作為參數


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved