C++中操作符函數

來源:互聯網
上載者:User

標籤:函式宣告   出現   友元   作用   工具   ret   操作符函數   返回   解釋   

一、操作符函數
在C++中,編譯器有能力把一個由資料、對象和操作符共同組成的運算式,解釋為對一個全域或成員函數的調用。
該全域或成員函數被稱為操作符函數,通過重定義操作符函數,可以實現針對自訂類型的運演算法則,並使之與內建類型一樣參與各種運算式。

二、雙目操作符運算式
成員函數
形如L#R雙目操作符運算式,將被編譯器解釋為 L.operator#(R)
a-b+c == a.operator-(b).operator+(c)
全域函數
形如L#R的雙目操作符運算式,將被編譯器解釋為 ::operator#(L,R)
a-(b+c) == ::operator-(a,::operator+(b,c))

 

三、單目操作符運算式
成員函數
形如#O或O#的單目動作表達式,將被編譯器解釋為 O.operator#(),唯一的運算元是調用對象。
全域函數
形如#O或O#的單目動作表達式,將被編譯器解釋為 ::operator#(O),唯一的運算元是調用對象。

四、典型的雙目運算子多載
成員函數
Point operator /+-*%|^& (Point& that)
{
  Point t; // 會調用無參構造
  t.x = x / that.x;
  t.y = y / that.y;
return t; // 不能返回局部對象的引用,否則會出現懸Null 參考
}
注意:原對象的值不變,要產生一個臨時的對象

bool operator > < >= <= == != || && (Point& that)
{

}

Point& operator += -= *= /= (Point& that)
{

  return *this;
}

注意:運算子的重載要符合情理。

全域函數
可能會訪問到參數的私人成員:
1、把成員變成公開,但會破壞類的封閉性。
2、把全域函式宣告為友元(友元不是成員),
3、不能在友元函數中直接存取成員變數。
Point operator + (Point& a,Point& b)
{
  Point t(a.x+b.x,a.y+b.y);
  return t;
}

五、典型的單目運算子多載
成員函數:
前++/--
Point& operator ++/-- (void)
{

}

後++/--
Point operator ++/-- (int)
{

}

全域函數:
前++/--
Point& operator ++/-- (Point&)
{

}

後++/--
Point operator ++/-- (Point&,int)
{

}

六、輸入、輸出運算子多載
輸入、輸出運算子不能重載為成員函數,只能是友元。
ostream& operator << (ostream& os,Point& p)
{

}

istream& operator >> (istream& is,Point& p)
{

}

七、特殊的運算子的重載
[] 下標運算子,可以把對象當作數組來使用。
() 函數運算子,可以把對象當作函數來使用。
-> 成員訪問運算子,可以把對象當作指標來使用。
* 解引用運算子,可以把對象當作指標來使用。
new/delete 也可以進行重載,但不建議使用。
new會自動調用重載的new函數再建構函式。
delete會先調用析構再調用重載的delete函數。

只有極個別的運算子的重載對於對象來說是有意義(>>,<<)

八、運算子多載的一些限制
1、不能重載的運算子
:: 範圍限定符
. 成員訪問運算
.* 成員指標解引用
?: 三目運算子
sizeof 位元組長度運算子
typeid 類型資訊操作符
2、運算子的重載改變不了運算子的優先順序
3、無法改變運算子的操作個數
4、無法發明新的運算子
5、重載運算子要注意運算子的一致性
不要改變運算子預設的運算規則
6、運算子的重載是為了方便使用、增強可讀,不應該成功賣弄的工具。

 


 

C++中操作符函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.