C 中的操作符過載

2021-07-11 01:27:27 字數 2324 閱讀 4542

1.不能過載的: . :: .* ?: sizeof

2.操作符過載是通過函式實現的。

class complex

void printcom()

};complex complexadd(complex &c1,complex &c2)

complex operator+(complex &c1,complex &c2)

void main()

操作符過載的兩種方法:

1.友元函式實現操作符過載

注意到沒有,我們的complex類中的a,b成員變數是public的,這樣全域性過載函式在外部才能訪問類的公有成員,但是一般情況下,我們將類的成員變數設定為私有的。那麼就不能再使用全域性過載函式了,有兩種解決方案,一種是友元函式實現,一種是成員函式實現 。我們先看友元函式實現,其實很簡單。我們只要將前面的全域性過載函式宣告為complex類的友元函式即可,這樣友元函式在外部就可以訪問類的私有成員變數。

class complex

void printcom()

}complex operator+(complex &c1,complex &c2)

2.成員函式實現操作符過載

另一種實現訪問私有變數的方法就是通過使用成員函式。

注意:左運算元被隱藏在this指標中。

class complex

void printcom()

//通過類的成員函式,實現 - 號過載。

//注意:隱藏了this指標

complex operator-(complex &c2)

}void main()

接下來,看看單運算元的操作符過載。

1.前置++(–)過載

class complex

void printcom()

//使用成員函式實現 前置 --

complex& operator--()

};//全域性函式實現前置++,在類中宣告為類的友元函式

//這裡一般返回值為類的引用而不是乙個匿名物件

complex& operator++(complex &c2)

void main()

2.後置++(–)過載

因為後置++的過載函式和前置++的過載函式引數和名稱都一樣,c++為了以示區別,在後置++的過載函式的引數中多加了乙個int引數,just為了區別前置++,沒有任何意義。

class complex

void printcom()

//成員函式實現後置 --

complex operator--(int)

};//全域性函式實現後置++

// 為啥返回返回乙個物件,而不是乙個引用?

// 因為,complex tmp是乙個區域性物件,該函式呼叫結束之後tmp物件會被**,c++通過在記憶體中建立乙個匿名物件,將tmp的記憶體拷貝給匿名物件返回,所以,這裡返回乙個匿名物件比較合適。

complex operator++(complex &c2,int)

void main()

友元函式過載和成員函式過載的區別?

什麼時候該用友元函式過載,什麼時候該用成員函式過載呢?我們先看下面的例子。

#include 

class complex

void printcom()

};//使用全域性函式實現《過載

//可以使用類成員函式實現《過載嗎?

//不能,因為ostream類的源**我們不能修改,所以只能使用全域性函式結合友元函式實現《過載

//這是友元函式存在的最大的意義,一般情況下友元函式都用在於此,其他情況都不建議使用友元函式。

void

operator

<<(std::ostream &out , complex &c2)

void main()

如何實現鏈式程式設計

#include 

class complex

void printcom()

};std::ostream& operator

<<(std::ostream &out , complex &c2)

void main()

c 中 操作符過載

操作符過載 1.有先後順序,如 t3 t1 t2 則t1 t2等價於t1.operate t2 2.對 操作符進行過載時,如aa是有本質區別的。操作符過載就是用函式的方法對乙個操作符進行重新定義,在該函式中定義了操作符所要完成的功能。其中cout是輸出流ostream中的物件 元素 3.a cout...

C 中 操作符過載

在實際程式中遇到一操作符問題,記錄下來方便以後查詢。在寫hashtable資料結構中,遇到操作符過載問題,具體需求如下 1.a x b 如果a x 為空,則新增記錄 2.b a x 如果a x 為空,則提示出錯 對操作符過載之後發現根本不能解決問題,查詢一些資料後發現該問題為過載後的讀寫問題,乙個過...

c 中過載《操作符

在類定義中,有時候我們需要直接利用cout來列印出類中的資料,此刻就需要過載 操作符來實現 假定定義了乙個類time 然後宣告了乙個類 time a cout 這樣的語法肯定是會報錯的,此刻就需要過載operator 要怎麼做呢?首先,在過載函式中,要訪問到類time中的私有成員的資料,所以我們需要...