C 友元關係和類的靜態成員概念和使用

2021-06-05 06:42:22 字數 2725 閱讀 2531

一:c++友元關係:

1.類對於成員的封裝(public, private, protected)

1).

封裝性的優勢:

有效地保護了物件的內部細節,使得物件的使用和物件的實現分開,互相不產生影響。

2).封裝性的缺陷:

1、c++為實現物件的封裝,必然會做一些額外的工作,從而導致程式的效率下降。

(呼叫成員函式來訪問成員的時間開銷降低了程式的執行效率)

2、乙個物件封裝的太好,也會讓該物件很難使用,也很難實現。

3).封裝性缺陷的彌補:

c++提供了友元(friend)來解決由封裝性帶來的問題。

friend修飾使其為有友元函式或友元類,其應用於比較特殊的情況(如提高效率),不提倡過度使用。

2.友元關係的分類:

乙個類可以宣告乙個友元關係,一起來共享類中的所有成員。

1.友元類:友元是乙個類.

在類中可把另乙個類宣告為友元類,如類b是類a的友元類,則類b中的所有成員函式都是類a的友元函式,都可以訪問類a的私有和保護成員。

2.友元函式:是在類中由關鍵字friend修飾的非成員函式。

3友元函式的特點:

一、友元函式可以直接通過物件名訪問類的私有和保護成員,可以像普通函式一樣在任何地方呼叫。

不是該類的成員函式,可以是乙個普通的函式,也可以是其他類的成員函式。

(朋友雖然不是家庭的成員,但容許到我們家裡訪問一樣)

二、友元函式不屬於任何類,因此可以放在類說明的任何位置,既可以在public區,也可以在private區。

(友元函式看看作是類的部分介面,建議出現在public的部分)

三、友元函式不需要通過物件或物件指標來呼叫,可以直接呼叫即可。

4.友元函式的缺點:

第一:使用友元波壞了封裝性,降低了程式的可讀性,因此應酌情使用.

第二:友元函式中沒有this指標(非類的成員函式),故必須通過函式引數來傳遞物件

.例項:

//類宣告檔案:sclass2_16.h

#ifndef __sclass2_16_h__

#define __sclass2_16_h__

#includeusing namespace std;

class csample1

; //空建構函式

//將類csample2宣告為類csample1的友元類(friend class),相當於類csample2的所有成員函式都是類csample1的友元函式,即可以訪問其所有成員.

friend class csample2;

void seti(int t)

int memberfunc( void ) //成員函式

//友元函式直接訪問csample類的私有資料成員i,即乙個類可以宣告乙個友元關係,一起來共享類中的所有成員

friend void friendfunc ( csample1 * cp, int a ) //增加乙個物件指標引數

private:

int i;

};class csample2

void showcsample1()

void showcsample1(csample1 s1)

private:

};#include"sclass2_16.h"

void main( void )

//定義乙個靜態成員函式實現對靜態資料成員j的操作

static int incr(cdemo &cdemo)

//靜態資料成員的定義

static int j;

private:

int m_i;

};//靜態資料成員的初始化

int cdemo::j = 0;

#endif //結束編譯預處理

主檔案:smain2_15.cpp

#include"sclass2_15.h"  //包含類宣告檔案

友元 友元函式 友元類和友元成員函式 C

有些情況下,允許特定的非成員函式訪問乙個類的私有成員,同時仍阻止一般的訪問,這是很方便做到的。例如被過載的操作符,如輸入或輸出操作符,經常需要訪問類的私有資料成員。友元 frend 機制允許乙個類將對其非公有成員的訪問權授予指定的函式或者類,友元的宣告以friend開始,它只能出現在類定義的內部,友...

友元 友元函式 友元類和友元成員函式 C

有些情況下,允許特定的非成員函式訪問乙個類的私有成員,同時仍阻止一般的訪問,這是很方便做到的。例如被過載的操作符,如輸入或輸出操作符,經常需要訪問類的私有資料成員。友元 frend 機制允許乙個類將對其非公有成員的訪問權授予指定的函式或者類,友元的宣告以friend開始,它只能出現在類定義的內部,友...

C 友元 友元函式 友元類和友元成員函式

有些情況下,允許特定的非成員函式訪問乙個類的私有成員,同時仍阻止一般的訪問,這是很方便做到的。例如被過載的操作符,如輸入或輸出操作符,經常需要訪問類的私有資料成員。友元 frend 機制允許乙個類將對其非公有成員的訪問權授予指定的函式或者類,友元的宣告以friend開始,它只能出現在類定義的內部,友...