C 友元函式和非成員運算子過載

2021-07-25 07:31:02 字數 738 閱讀 8610

定義友元

+運算子函式box operator+(const box &b1 ,const box &b2);

友元函式的特點是,可以與成員函式一樣具有訪問private 成員變數。但友元函式並不是成員函式。

建立友元函式的關鍵在於,將其原型放在類宣告中,並在函式名前加上關鍵字friend

。#include using namespace std;

class box;

box::box(int length,int width, int height)

box::box()

box operator+(const box &b1 ,const box &b2)

int box::show_volume(){ //輸出體積

cout<

在box類的原型中,宣告友元+運算子函式函式。

friend

box operator+(const box &b1 ,const box &b2);

該函式的定義需訪問box類的private變數,雖然operator+並不是box類的成員函式,但由於其實box類的友元函式,其許可權和成員函式一樣,可以訪問private變數。

box1 + box2 等價於operator+(box1,box2);

可以理解為+運算子左邊

的變數作為operator+的第一

個引數,+運算子右

邊的變數作為operator+的第二

個引數

C 非成員函式實現運算子 過載

非成員函式實現運算子過載可以實現運算子前後都可以隱式轉換成所需的型別進行計算,如 fraction d a 2 根據a的型別,將2隱式轉換為fraction型別 fraction e 2 a 當類具有獲取參與運算子過載運算的必要私有資料介面時,使用非友元非成員函式。include using nam...

C 運算子過載形式 成員函式or友元函式

運算子過載是c 多型的重要實現手段之一。通過運算子過載對運算子功能進行特殊定製,使其支援特定型別物件的運算,執行特定的功能,增強c 的擴充套件功能。運算子過載的我們需要堅持四項基本原則 1 不可臆造運算子 2 運算子原有運算元的個數 優先順序和結合性不能改變 3 運算元中至少乙個是自定義型別 4 保...

C 運算子過載形式 成員函式or友元函式

一般來說,c 運算子過載可採用成員函式和友元函式,二者都可以訪問類的私有成員,那麼該採用哪一種呢?首先看一下二者的區別。如下 class string 因為string的構造函式引數為乙個char 所以如果採用友元形式的friend string operator const string a,co...