程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 關於C++中的友元函數的一些總結

關於C++中的友元函數的一些總結

編輯:關於C++

關於C++中的友元函數的一些總結。本站提示廣大學習愛好者:(關於C++中的友元函數的一些總結)文章只能為提供參考,不一定能成為您想要的結果。以下是關於C++中的友元函數的一些總結正文


1.友元函數的簡略引見

1.1為何要應用友元函數

在完成類之間數據同享時,削減體系開支,進步效力。假如類A中的函數要拜訪類B中的成員(例如:智能指針類的完成),那末類A中該函數如果類B的友元函數。詳細來講:為了使其他類的成員函數直接拜訪該類的公有變量。即:許可裡面的類或函數去拜訪類的公有變量和掩護變量,從而使兩個類同享統一函數。

現實上詳細年夜概有上面兩種情形須要應用友元函數:(1)運算符重載的某些場所須要應用友元。(2)兩個類要同享數據的時刻。

1.2應用友元函數的優缺陷

1.2.1長處:可以或許進步效力,表達簡略、清楚。

1.2.2缺陷:友元函數破環了封裝機制,盡可能不應用成員函數,除非不得已的情形下才應用友元函數。

2.友元函數的應用

2.1友元函數的參數:

由於友元函數沒有this指針,則參數要有三種情形:

2.1.1 要拜訪非static成員時,須要對象做參數;

2.1.2 要拜訪static成員或全局變量時,則不須要對象做參數;

2.1.3 假如做參數的對象是全局對象,則不須要對象做參數;

2.2友元函數的地位

由於友元函數是類外的函數,所以它的聲明可以放在類的公有段或私有段且沒有差別。

2.3友元函數的挪用

可以直接挪用友元函數,不須要經由過程對象或指針

2.4友元函數的分類:

依據這個函數的起源分歧,可以分為三種辦法:

2.4.1通俗函數友元函數

2.4.1.1 目標:使通俗函數可以或許拜訪類的友元

2.4.1.2 語法:

聲明: friend + 通俗函數聲明

完成地位:可以在類外或類中

完成代碼:與通俗函數雷同

挪用:相似通俗函數,直接挪用

2.4.1.3代碼:

class INTEGER

 {

  friend void Print(const INTEGER& obj);//聲明友元函數

 };

void Print(const INTEGER& obj)

{

   //函數體

}

void main()

{

  INTEGER obj;

  Print(obj);//直接挪用

}

2.4.2類Y的一切成員函數都為類X友元函數—友元類

2.4.2.1目標:應用單個聲明使Y類的一切函數成為類X的友元,它供給一品種之間協作的一種方法,使類Y的對象可以具有類X和類Y的功效。

2.4.2.2語法:

聲明地位:私有公有都可,常寫為公有(把類算作一個變量)

聲明: friend + 類名(不是對象哦)

2.4.2.3代碼:

class girl;

class boy

{

public:

  void disp(girl &);

};

void boy::disp(girl &x) //函數disp()為類boy的成員函數,也是類girl的友元函數

{

  cout<<"girl's name is:"<<x.name<<",age:"<<x.age<<endl;//借助友元,在boy的成員函數disp中,借助girl的對象,直接拜訪girl的公有變量

}

class girl

{

private:

  char *name;

  int age;

  friend boy; //聲明類boy是類girl的友元

};

main函數就不寫了和通俗挪用時一樣的。

2.4.3類Y的一個成員函數為類X的友元函數

2.4.3.1目標:使類Y的一個成員函數成為類X的友元,詳細而言:在類Y的這個成員函數中,借助參數X,可以直接以X的公有變量

2.4.3.2語法:

聲明地位:聲明在私有中 (自己為函數)

聲明:friend + 成員函數的聲明

挪用:先界說Y的對象y---應用y挪用本身的成員函數---本身的成員函數中應用了友元機制

2.4.3.3代碼:

完成代碼和2.4.2.3中的完成及其類似只是設置友元的時刻變成friend void boy::disp(girl &);本身處理喽……

小結:其實一些操作符的重載完成也是要在類外完成的,那末平日如許的話,聲明為類的友元是必需滴。

4.友元函數和類的成員函數的差別

4.1 成員函數有this指針,而友元函數沒有this指針。

4.2 友元函數是不克不及被繼續的,就像父親的同伙未必是兒子的同伙。

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