運算符重載

算符重載是通過函數實現的,它本質上是函數重載。運算符重載函數除了函數名有特定的格式,其它地方和普通函數並沒有區別。

操作符重載規則

  • 並不是所有的運算符都可以重載。
  • 重載不能改變運算符的優先級結合性
  • 重載不會改變運算符的用法,原有有幾個操作數、操作數在左邊還是在右邊,這些都不會改變
  • 運算符重載函數既可以作爲類的成員函數,也可以作爲全局函數。

+= -= 類似操作返回值最好類的引用,不然會多一次拷貝構造。

在類中實現

在類中實現和在類外實現的區別

  • 類外實現需要在類中聲明爲友元函數
  • 在類中實現則成爲成員函數,第一個參數爲this指針。在類外可自定義參數
 9 using namespace std;
 10 class A{
 11   public:
 12     int m_a;
 13     A operator+(const A& A1){                                               
 14       A A2;
 15       A2.m_a = this->m_a + A1.m_a;
 16       return A2;
 17     }
 18     A():m_a(10){}
 19     void print(){
 20       cout<<"m-a "<<this->m_a;
 21     }
 22 };

以全局函數重載+ 以成員函數重載+=

爲甚麼:

  • +運算符具有左結合性
  • Complex c2 = c1 + 15.6;可以實現 ,但是Complex c3 = 28.23 + c1;不能實現

對於+=來說定義在類內部(成員函數)只需要一個參數,this自動隱藏。更加安全。

轉換構造函數

當參數不能完全匹配時,可以通過轉換構造函數對參數進行轉化。
在這裏插入圖片描述

重載>>和<<

注意:流參數(istream和ostream) 不能加const,返回值一定要是引用,不然不能連續輸出。

友元函數在類中聲明
	friend istream& operator>>(istream& is, A& other);
	friend ostream & operator<<(ostream & out, const A& other);
類外定義	
istream& operator>>(istream& is,A& other){
	is >> other.m_a;
	return is;
}
ostream& operator<<( ostream& os,const A&other){
	os << other.m_a << endl;
	return os;
}

重載前置++和後置++

用一個佔位參數來區分前置++和後置++

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章