檔案
#ifndef a_h
#define a_h
class a
;//建構函式初始化
~a(){};
void setval(int a)
friend void printval(class a *);//友元成員函式
private:
int m_a;
static int m_b;//靜態成員變數
};#endif
檔案
#include "stdafx.h"
#include "a.h"
#include using namespace std;
void printval(a *a)//友元函式此處就不用再加friend,只需要在類體內宣告的時候加。virtual也一樣。友元函式不是類的成員函式,所以不用加類的域作用符
friend 型別名 友元函式名(形參表);
然後在類體外對友元函式進行定義,定義的格式和普通函式相同,但可以通過物件作為引數直接訪問物件的私有成員
1)必須在類的說明中說明友元函式,說明時以關鍵字friend開頭,後跟友元函式的函式原型,友元函式的說明可以出現在類的任何地方,包括在private和public部分;
2)注意友元函式不是
類的成員函式,所以友元函式的實現和普通函式一樣,在實現時不用"::"指示屬於哪個類,只有成員函式才使用"::"作用域符號;
3)友元函式不能直接訪問類的成員,只能訪問物件成員,
4)友元函式可以訪問物件的私有成員,但普通函式不行;
5)調用友元函式時,在實際引數中需要指出要訪問的物件,
6)類與類之間的友元關係不能繼承。
靜態成員與友元函式
1 靜態成員 由來 使用全域性物件實現資料共享,由於其處處可見,不夠安全,故可使用靜態成員實現類的多個物件之間的資料共享。包括 靜態資料成員 靜態成員函式 特點 靜態資料成員屬於類,而不屬於某個物件獨有,類的所有物件共享靜態資料成員 靜態資料成員使用關鍵字static,在類體中宣告,在類體外定義,以...
靜態成員與友元
靜態成員與友元 1 實驗目的 學習友元函式的定義和原理。學習靜態資料成員和靜態成員函式的使用。學習靜態成員代替全域性變數實現物件間的共享。2 實驗內容 1 有如下類的定義。類成員函式copy用於實現兩個物件的相互拷貝,請完成該函式的實現。有兩種方法即用成員函式和友元函式實現 include incl...
靜態資料成員 靜態成員函式 友元
建立靜態成員和友元的目的 建立靜態成員主要是解決資料共享問題,而建立友元的目的是為了讓某些函式訪問類中的私有成員。1 靜態資料成員 思考 為什麼要定義靜態資料成員?答 如果不定義為靜態資料成員,那麼每個物件都分別有乙個i的副本 拷貝 但定義為靜態資料成員之後,所有的物件共享有乙個i的副本,就是說i在...