C++ 中的友元函數和示例用例

已發表: 2022-10-22

數據隱藏是一種基本的軟件開發技術,廣泛用於面向對象的編程語言 (OOP)。 它限制從類外部訪問私有數據成員。 但是,稱為友元函數的 C++ 特性違背了數據隱藏原則。

在本文中,您將了解什麼是 C++ 中的友元函數,什麼是友元類,並通過示例探索一些用例。

查看我們的免費技術課程,以獲得競爭優勢。

目錄

C++中的友元函數是什麼?

C++ 中的友元函數是在類外部聲明的函數,但可以訪問類的私有成員和受保護成員。 儘管非成員函數無法訪問特定類的私有成員,但將它們聲明為友元函數可以讓它們訪問類的私有成員和受保護成員。

查看 upGrad 的 DevOps 高級認證

朋友功能的特點

C++中的友元函數具有以下特點:

  • 友元函數超出了它被聲明為友元的類的範圍
  • 友元函數可以是類的成員,也可以是在類範圍之外聲明的函數
  • 朋友功能不限於單個班級。

探索我們流行的軟件工程課程

LJMU & IIITB 計算機科學碩士 加州理工學院 CTME 網絡安全證書課程
全棧開發訓練營 區塊鏈中的 PG 程序
全棧開發中的執行 PG 計劃
在下面查看我們的所有課程
軟件工程課程

  • 調用友元函數就像調用類的任何普通函數而不使用對象
  • 我們不能使用對象調用朋友函數,因為它不在類的範圍內
  • C++ 中的友元函數將對像作為參數
  • 我們可以在私有或公共部分聲明一個友元函數
  • 成員名稱不能直接訪問友元函數,它必須使用點成員運算符和對象名稱與成員名稱

查看 upGrad 的網絡安全高級認證

Friend 函數的語法

要聲明朋友函數,我們在類的主體中使用friend關鍵字。 友元函數的語法是:

類類名 {

…………

朋友returnType functionName(arg list);

…………

}

急需的軟件開發技能

JavaScript 課程 核心 Java 課程 數據結構課程
Node.js 課程 SQL 課程 全棧開發課程
NFT 課程 DevOps 課程 大數據課程
React.js 課程 網絡安全課程 雲計算課程
數據庫設計課程 Python 課程 加密貨幣課程

如果我們分解語法,以下是每個術語的含義:

  • friend是表示該函數是友元函數的關鍵字
  • returnType是函數的返回類型
  • functionName是與該類成為朋友的函數名稱
  • arg list是我們將傳遞的參數

從世界頂級大學在線學習軟件開發課程。 獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。

C++ 友元函數的示例

現在,讓我們看一些程序來說明朋友功能。

示例 1:打印盒子高度的 C++ 友元函數

#include <iostream>

使用命名空間標準;

類框

{

私人的:

整數高度;

上市:

盒子():高度(0){}

朋友 int printHeight(Box); //好友函數

};

int printHeight(框 h)

{

h.高度 += 40;

返回h.height;

}

主函數()

{

方框 h;

cout<<“盒子的高度:”<< printHeight(h)<<endl;

返回0;

}

閱讀我們與軟件開發相關的熱門文章

如何在 Java 中實現數據抽象? Java中的內部類是什麼? Java 標識符:定義、語法和示例
通過示例了解 OOPS 中的封裝 C 中的命令行參數解釋 2022 年雲計算的 10 大特點和特點
Java 中的多態性:概念、類型、特徵和示例 Java 中的包以及如何使用它們? Git 初學者教程:從零開始學習 Git

輸出:

箱高:40

示例 2:當 C++ 友元函數對兩個類友好時

#include <iostream>

使用命名空間標準;

// 前向聲明

Q 類;

類 ClassP {

上市:

// 將 numP 初始化為 12 的構造函數

ClassP() : numP(12) {}

私人的:

整數 numP;

// 友元函數聲明

朋友 int add(ClassP, ClassQ);

};

類 Q {

上市:

// 將 numQ 初始化為 1 的構造函數

ClassQ() : numQ(1) {}

私人的:

整數 numQ;

// 友元函數聲明

朋友 int add(ClassP, ClassQ);

};

// 訪問兩個類的成員

int add(ClassP objectP, ClassQ objectQ) {

返回(objectP.numP + objectQ.numQ);

}

int main() {

P類對象P;

ClassQ objectQ;

cout << “總和:” << add(objectP, objectQ);

返回0;

}

輸出:

總和:13

在上面的例子中,P 類和 Q 類將 add()聲明為友元函數,使其能夠訪問這兩個類的私有數據。 此外,P 類中的友元函數正在使用 Q 類。

因此,我們在程序中對 Q 類進行了前向聲明。

實現朋友功能

為了更好地了解 C++ 中的友元函數,我們現在將研究實現友元函數的兩種方法。

  1. 通過另一個類的方法在 C++ 中實現友元函數

當我們需要訪問另一個已被聲明為友元的類的私有成員和受保護成員時,我們在 C++ 中聲明友元類。 也可以將另一個類的單個成員函數聲明為友元。

類 類名

{

朋友類friend_class;//聲明朋友類

};

班級朋友班

{

};

在上面的朋友類聲明中, friend_class中的所有函數都是class_name的朋友函數

下面通過一個簡單的例子來說明通過另一個類的方法實現友元函數:

#include <iostream>

使用命名空間標準;

A級

{

詮釋 p = 4;

B類朋友; //好友類

};

B類

{

上市:

無效顯示 (A &a)

{

cout<<”p的值為:” <<ap;

}

};

主函數()

{

一個;

乙乙;

  1. 顯示(一);

返回0;

}

輸出:

p的值為:4

  1. 實現一個全局函數

實現一個全局友元函數讓我們可以訪問全局類聲明的所有受保護和私有成員。 這是一個例子:

#include<iostream>

使用命名空間標準;

課堂空間

{

詮釋一個;

詮釋 b;

詮釋 c;

上市:

無效的setdata(int x,int y,int z);

無效顯示(無效);

朋友 void 運算符-(空格 &s);

};

空白空間 ::setdata (int x, int y, int z)

{

a=x; b=y; c=z;

}

空白空間::顯示(空白)

{

cout<<a<<” “<<b<<” “<<c<<“\n”;

}

void 運算符-(空格 &s)

{

薩=-薩;

某人=-某人;

sc = - sc;

}

主函數()

{

空間 s;

  1. 設置數據(9,2,3);

cout<<“s:”;

  1. 展示 ();

-s;

cout<<“-s:”;

  1. 展示 ();

返回0;

}

輸出:

年代:9 2 3

-s:-9 -2 -3

在上面的示例程序中, operator-是我們在類範圍內全局聲明的友元函數。

什麼是 C++ 中的朋友類?

雖然現在已經很明顯了,朋友類是一個可以訪問被聲明為朋友的類的私有成員和受保護成員的類。

簡單來說,當我們希望一個類能夠訪問另一個類的私有成員和受保護成員時,使用 C++ 中的友元類。

我們聲明為另一個類的友元的類的成員函數是友元類的友元函數。 因此,友元函數鏈接了這兩個類。

Friend 類的語法

這是 C++ 中友元類的語法:

R類; //前向聲明

P類{

// 其他聲明

朋友等級R;

};

R類{

// 聲明

};

在上圖中,R 類是 P 類的朋友。因此,R 類可以訪問 P 類的私有數據成員。但是反過來不成立,P 類不能訪問 R 類的私有數據成員.

此外,前向聲明用於在實體被分類定義之前通知編譯器實體的存在。 在這裡,我們使用前向聲明來聲明 Class R 以通知編譯器它的存在。 前向聲明允許我們在 P 類中使用 R 類的對象。

C++中友元函數有什麼用?

總結一下我們的討論,讓我們看一下 C++ 中友元函數的兩個主要用途:

  • 首先,當我們想要訪問一個類的私有成員和受保護成員時,我們使用朋友函數。 為此,我們通常會要求該類的對象訪問私有成員和受保護成員。 但是,朋友函數消除了函數需要成為類成員才能獲得訪問權限的情況。
  • C++ 中友元函數的另一個用途是運算符重載。 具有相同名稱但不同編號和參數的函數稱為重載函數。 C++ 中的友元函數可用於運算符重載。

在這種情況下,運算符重載函數在friend關鍵字之前並聲明了一個函數類範圍。 當被友元函數重載時,二元運算符採用兩個顯式參數,而一元運算符採用一個參數。 它的工作方式與二元運算符函數相同,只是友元運算符函數實現發生在類範圍之外。

這使我們對C++ 中的友元函數及其用途的討論結束。 希望這可以幫助您進一步了解 C++。

此外,如果您希望以全棧開發人員的身份開始您的職業生涯, upGrad與 IIIT 班加羅爾合作,提供完全在線的軟件開發高管研究生課程 - 為期 13 個月的全棧開發專業化。

節目亮點:

  • 親身接觸行業相關案例研究和作業
  • 450 多個小時的 360 度學習
  • 10 多種頂級編程工具和語言
  • 與行業導師的 1:1 職業指導會議
  • 24/7 學生支持

立即註冊,立即獲得獨家 upGrad 福利!

C++中的友元函數是什麼?

C++ 中的友元函數是一個不是類成員但可以訪問其私有成員和受保護成員的函數。

你如何聲明一個朋友函數?

友元函數可以訪問類的私有和受保護數據。 要聲明一個朋友函數,我們在類的主體中使用friend關鍵字。

如何在 C++ 中結交班上的朋友?

我們使用friend關鍵字將一個類聲明為C++中的友元類。 該關鍵字允許任何類訪問其他類和函數的私有和受保護成員。