一: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指標(非類的成員函式),故必須通過函式引數來傳遞物件
.例項:
主檔案:smain2_15.cpp//類宣告檔案: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 //結束編譯預處理
#include"sclass2_15.h" //包含類宣告檔案
友元 友元函式 友元類和友元成員函式 C
有些情況下,允許特定的非成員函式訪問乙個類的私有成員,同時仍阻止一般的訪問,這是很方便做到的。例如被過載的操作符,如輸入或輸出操作符,經常需要訪問類的私有資料成員。友元 frend 機制允許乙個類將對其非公有成員的訪問權授予指定的函式或者類,友元的宣告以friend開始,它只能出現在類定義的內部,友...
友元 友元函式 友元類和友元成員函式 C
有些情況下,允許特定的非成員函式訪問乙個類的私有成員,同時仍阻止一般的訪問,這是很方便做到的。例如被過載的操作符,如輸入或輸出操作符,經常需要訪問類的私有資料成員。友元 frend 機制允許乙個類將對其非公有成員的訪問權授予指定的函式或者類,友元的宣告以friend開始,它只能出現在類定義的內部,友...
C 友元 友元函式 友元類和友元成員函式
有些情況下,允許特定的非成員函式訪問乙個類的私有成員,同時仍阻止一般的訪問,這是很方便做到的。例如被過載的操作符,如輸入或輸出操作符,經常需要訪問類的私有資料成員。友元 frend 機制允許乙個類將對其非公有成員的訪問權授予指定的函式或者類,友元的宣告以friend開始,它只能出現在類定義的內部,友...