C 過載 和 運算子

2022-06-18 07:03:10 字數 1072 閱讀 5698

流提取運算子(>>)和流插入運算子(<

注意,我們到目前為止,必須呼叫tostring() 函式返回乙個表示rational物件的字串,再把它顯示出來。例如,為了顯示rational 物件r,要編寫一下**:

//形式1

cout << r.tostring();

而不能直接使用:

//

形式2cout << r;

但我們平時見到的int、double、string型別都可以直接使用 << 和 >> 運算子,所以我們來過載一下。

上面的形式2等同於:

<

//或者

operator

<< (cout, r)

運算子 << 有兩個運算元,即cout和r,分別是ostream類的例項,和rational類的例項。因此,cout不能作為rational類的成員函式被過載,所以我們把它宣告為rational類的友元函式(詳見c++ 訪問私有成員——友元函式和友元類)

friend ostream& operator

<

實現:ostream& operator

<

rational rational)

同理,過載 >> 運算子時也要宣告為友元函式

friend istream& operator>>(istream& in, rational& rational);
實現(注意新增標頭檔案,因為cout在中):

istream& operator>>(istream& in, rational&rational)
測試:

#include #include 

"rational.h

"using

namespace

std;

intmain()

執行結果:

C 運算子過載和函式過載

c 允許在同一作用域中的某個函式和運算子指定多個定義,分別稱為函式過載和運算子過載。過載宣告是指乙個與之前已經在該作用域內宣告過的函式或方法具有相同名稱的宣告,但是它們的引數列表和定義 實現 不相同。當呼叫乙個過載函式或過載運算子時,編譯器通過把您所使用的引數型別與定義中的引數型別進行比較,決定選用...

C 運算子過載 過載特殊運算子

賦值運算子用於同類物件間的相互賦值。賦值運算子只能被過載為類的非靜態成員函式,不能過載為友元函式和普通函式。對於使用者自定義的類而言,如果沒有過載賦值運算子,那麼c 編譯器會為該類提供乙個預設的過載賦值運算子成員函式。預設賦值運算子的工作方式是按位對拷,將等到右邊物件的非靜態成員拷貝給等號左邊的物件...

C 運算子過載賦值運算子

自定義類的賦值運算子過載函式的作用與內建賦值運算子的作用類似,但是要要注意的是,它與拷貝建構函式與析構函式一樣,要注意深拷貝淺拷貝的問題,在沒有深拷貝淺拷貝的情況下,如果沒有指定預設的賦值運算子過載函式,那麼系統將會自動提供乙個賦值運算子過載函式。賦值運算子過載函式的定義與其它運算子過載函式的定義是...