天天看點

012--C++類的友元函數及友元類(最優)

簡介:友元函數分為友元類以及友元函數,它的重點在于能夠調用一個被private(私有化)的類中的是以資料以及函數。你要知道一個類它是具有封裝性的,因為它的資料被private,public.是以,friend 打破了這種封裝性,也就可以調用其所在類所有資料。

友元

在局部打破程式封裝性的一種手段

關鍵字:friend

友元函數:友元類

友元函數:

  1. 這個函數不屬于類
  2. 這個函數可以在類外定義,也可以在類内定義,不管定義 在哪,都是一個普通的函數
  3. 有權通路和調用類的私有以及保護成員
友元類:
  1. 與目标無關的一個類
  2. 要在類外定義
  3. 友元類可以有權通路目标類的所有成員
友元的特點:
  1. 單方向
  2. 不傳遞
  3. 不繼承

代碼學習:(有注釋)

#include<iostream>
using namespace std;
class MyStu{
  int hp;
  int mp;
public:
  friend class fStu;//聲明友元類,說明fStu是MyStu的朋友,是以fStu 可以調用MyStu的
  MyStu(){//所有資料
    hp = 10;
    mp = 20;
  }//注意友元函數的寫法,必須在參數體内寫上這個類的應用,這樣才能調用這個類的所有資料
  friend int getHp(MyStu& s);//友元函數類中聲明,類外定義
  friend int getMp(MyStu& s){//友元函數類中聲明并定義
    return s.mp;//友元函數的聲明要再類内,但是它隻是一個普通的函數,不屬于類
  }

};
int getHp(MyStu& s){//友元函數類外定義不用再寫标志符friend;
  return s.hp;
}
class MyStu;
class fStu{
public:
  fStu(){
  
  }
  void setFsu(MyStu& s){//友元類中的相關函數如果要使用類中的資料,就要再函數的參數
    s.mp = 100;//清單裡加上類的引用。
    s.hp = 200;
  }
  void getHM(MyStu& s){
    cout << "友元類中的函數得到的hp,mp值:" << endl;
    cout << s.mp << "    " << s.hp << endl;
  }
};
int main(){
  MyStu s;
  cout << "類中的友元函數得到的hp,mp值:" << endl;
  cout << getHp(s) << endl;
  cout << getMp(s) << endl;
  cout << "---------------------" << endl;
  fStu f;
  f.setFsu(s);
  f.getHM(s);
  return 0;

}      
運作結果:

不要停留在昨天的日子裡,要學會擁抱明天,明天的風景真的很美··················

繼續閱讀