在學習運算子"<<"以及">>"過載的時候在自定義的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 使...