運算子過載學習小記

2021-06-16 23:19:09 字數 599 閱讀 5314

在學習運算子"<<"以及">>"過載的時候在自定義的myclass裡面看到這樣一條header

friend ostream &operator<<(ostream &out, myclass &classname);

對為什麼唯獨"<<"和">>"的運算子過載需要加上這個friend感到非常疑惑 

最後經過搜尋引擎的幫助以及自己寫了個驗證程式確定 終於搞懂了

對於沒有加上friend的運算子過載 運算子的左邊必須是class的instance

也就是說 對於這樣兩個myclass類的例項a, b

a = b + 1;

這條語句會用1來初始化乙個myclass的物件 然後根據過載函式operator+執行與b的相加操作

因此這條語句等價於 a = b.operator+(1);

回到一開始產生疑惑的地方

myclass a;

cout << a;

《運算子的左邊實際上是cout, 也就是ostream類. 

為了實現上述**的效果

需要加上friend讓myclass內部的私有變數可以被讀取輸出

運算子過載之過載型別運算子

普通型別 類型別 呼叫對應的只有乙個引數 引數的型別就是這個普通型別 的建構函式 需求 boy boy1 10000 薪資 建構函式boy int boy boy2 rock 姓名 建構函式boy char 普通型別賦值給類型別其實很簡單,就是專門的對這個賦值的型別定義乙個建構函式。編譯器在執行 的...

運算子過載 賦值運算子的過載

有時候希望賦值運算子兩邊的型別可以不匹配,比如,把乙個int型別變數賦值給乙個complex物件,或把乙個 char 型別的字串賦值給乙個字串物件,此時就需要過載賦值運算子 注意 賦值運算子 只能過載為成員函式 賦值運算子過載例項示例 include include using namespace ...

C 學習 運算子過載

同函式過載一樣,算數操作符過載能夠帶給我們操作不同資料型別的方法,包括你自己定義的類。我們日常最常用的就是加 減 乘 除,而它們的性質又有些相似。所以,它們的運算子實現方式也有些相似。共有三種實現方式 首先,我們介紹怎樣使用友鄰函式定義操作符過載。看下面的 include class cents 使...