在c++中類的私有成員是不能被直接訪問的,需要通過類中提供的成員函式簡介的操作這些資料。同時c++ 能夠使用流提取運算子 >> 和流插入運算子 << 來輸入和輸出內建的資料型別。可以過載流提取運算子和流插入運算子來操作物件等使用者自定義的資料型別。
但是如果直接在類內部直接過載輸入、輸出流運算子,那麼在使用時只能通過obj>>cin //相當於obj.operator>>(cin)
或是obj《例如:c++ 輸入/輸出運算子過載——菜鳥教程
用友元的方式有利有弊,通常它可以在較為頻繁訪問類私有成員時代替呼叫函式成員這一步驟,節省一些不必要的呼叫,減輕**量提高效率,但同時它也破壞了內的封裝性,不安全。
所以,我這裡沒有採取友元的方式去過載,而是通過在類外新實現了一種方法,在函式內部實現這一過程,而留給使用者的介面任然是以前得讀寫習慣,**如下:
class date
~date() {}
istream & operator>>(istream &in)
ostream & operator<<(ostream &out) const
ostream& operator<<(ostream& out, const date& date)
在類的內部過載輸出流與輸入流運算子,他們的呼叫邏輯是物件.呼叫函式(輸出/輸出流)。通過物件呼叫自身的函式,把輸入流或輸出流當做引數呼叫。因此,我們在進行輸入或輸出的操作時不得不使用如下的方式:
int main()
這樣的語法很不直觀,也不符合我們的**編寫邏輯,因此我們可以考慮增加乙個中間層來解決。具體的,我們可以編寫乙個函式,讓此函式幫我們呼叫輸入輸出。這個中間層函式無疑是符合我們書寫習慣的語法邏輯,而我們通過該函式的呼叫方式便可簡介的完成輸入輸出操作。
int main()
此外,為了提高函式的呼叫效率,我們可以將此中間層函式設計成內聯的(inline)。
類似的還有 operator+、operator- 等函式過載方式,在類中過載這些函式後,只能通過類物件在前,引數在後的呼叫方式。例如:
class int
// 過載 operator+
int operator+(const int& rhs) const
int operator+(const int val) const };
int operator+(const int val, const int& rhs)
int main()
我們在類中過載了物件之間的 operator+,物件與整數之間的 operator+,在類外通過乙個中間函式實現了 整數與物件之間的 operator+ 。 C 過載輸入流 輸出流運算子
在c 中類的私有成員是不能被直接訪問的,需要通過類中提供的成員函式簡介的操作這些資料。同時c 能夠使用流提取運算子 和流插入運算子 來輸入和輸出內建的資料型別。可以過載流提取運算子和流插入運算子來操作物件等使用者自定義的資料型別。但是如果直接在類內部直接過載輸入 輸出流運算子,那麼在使用時只能通過o...
友元運算子過載
運算子就是一種特殊的函式 運算子過載可以是普通函式 const money operator const money a1,const money a2 可以是成員函式 const money operator const money a2 const 當二元運算子作為成員函式進行過載時,只有乙個引...
C 友元運算子過載函式
運算子過載函式 實現物件之間進行算數運算,實際上是物件的屬性之間做運算 包括 加號 減號 負號 正號 運算子過載函式分為 普通友元運算子過載函式 成員友元運算子過載函式 成員運算子過載函式 運算子運算子過載函式按運算型別為 雙目運算子過載函式,如加 減 乘 除 賦值 單目運算子過載函式 自加 自減 ...