這四種操作符居然不能當作友元過載

2021-05-25 23:08:08 字數 922 閱讀 5681

賦值操作符(=),下標操作符(),函式呼叫操作符(()),指標成員訪問箭頭(->)必須過載為類成員函式。

code:

code:   

friend f operator=(const f& f1,const f&f2);//error c2801: 「operator =」必須是非靜態成員  

code:

f operator=(const f& f)  

這樣做就對了,這是什麼原因呢?

在c++ primer14.4assignments operators這一節當中提到:

類賦值操作符接受類型別形參,通常,該形參是對類型別的const 引用,但也可以是類型別或對類型別的非 const 引

用。如果沒有定義這個操作符,則編譯器將合成它。類賦值操作符必須是類的成員,以便編譯器可以知道是否需要合成乙個。

真是這樣的嗎?讓我們看看**

code:

#include 

using

namespace std;      

class f      

friend ostream& operator<<(ostream& os, const f& f)   

/*f operator=(const f& f)*/

};      

int main()      

在第 13.2 節中講到:

大多數操作符可以定義為成員函式或非成員函式。當操作符為成員函式時,它的第乙個運算元隱式繫結到this 指標。有些操作符(包括賦值操作符)必須是定義自己的類的成員。因為賦值必須是類的成員,所以this 繫結到指向左運算元的指標。因此,賦值操作符接受單個形參,且該形參是同一類型別的物件。右運算元一般作為 const 引用傳遞。

我們從這裡了解到,c++封裝的太結實,不透氣啊

**剖析:

C 四種cast操作符

t expression 或 t expression 函式風格 function style 兩種形式之間沒有本質上的不同。對於具有轉換的簡單型別而言 c 風格轉型工作得很好。然而,這樣的轉換符也能不分皂白地應用於類 class 和類的指標。ansi c 標準定義了四個新的轉換符 reinterp...

C 的四種cast操作符的區別

q 什麼是c風格轉換?什麼是static cast,dynamic cast 以及 reinterpret cast?區別是什麼?為什麼要注意?a 轉換的含義是通過改變乙個變數的型別為別的型別從而改變該變數的表示方式。為了型別轉換乙個簡單物件為另乙個物件你會使用傳統的型別轉換操作符。比如,為了轉換乙...

這四種路徑解讀

表示當前目錄即當前路徑 表示父級目錄即上一級路徑 此處為兩個點加乙個斜槓,但是這個編輯器加了兩個點之後就自動冒出三個點了,所以在此解釋一下 表示根目錄即 根路徑 表示上兩級路徑 此處同上 下面為例子表示 例項一第二個表示 斜槓的路徑 這個路徑也訪問不了這個靜態資源檔案 第三個表示.表示當前目錄,帶有...