運算符重載函數怎麼調用

提問者:用戶2eQ8n9uY 發布時間: 2024-11-19 06:38:39 閱讀時間: 3分鐘

最佳答案

在C++等支撐運算符重載的編程言語中,運算符重載函數是一種特其余成員函數,它容許我們對自定義範例的東西利用標準運算符停止操縱。本文將具體介紹運算符重載函數的挪用方法及實在現道理。 運算符重載函數的挪用平日產生在兩個操縱數至少有一個是用戶自定義範例時。在編譯器的眼中,每一個運算符都對應著一個特定的函數。當我們利用運算符對自定義範例東西停止操縱時,現實上是挪用了與之對應的重載函數。 運算符重載可能經由過程兩種方法停止:成員函數重載跟非成員函數(全局函數)重載。

成員函數重載

當運算符的第一個操縱數(左側操縱數)是自定義範例東西時,運算符可能重載為類的成員函數。成員函數的挪用方法如下: 前去範例 operator運算符(參數範例 參數名); 比方,對重載加法運算符,可能如許定義: MyClass operator+(const MyClass& other) const; 挪用時: MyClass a, b; MyClass c = a + b; 這裡,東西a跟b停止加法操縱,編譯器會挪用重載的operator+函數。

非成員函數重載

當運算符須要兩個雷同範例的操縱數,或許第一個操縱數不適共同為成員函數的挪用者時,可能利用非成員函數停止重載。非成員函數須要在類的外部申明,並且須要將自定義範例作為參數之一。 friend 前去範例 operator運算符(參數範例 參數1, 參數範例 參數2); 比方,重載前置遞增運算符: friend MyClass& operator++(MyClass& obj); 挪用時: MyClass a; ++a; 這裡,前置遞增運算符被重載為非成員函數,直接利用於東西a。

實現道理

運算符重載的實現道理基於稱號潤飾(name mangling)技巧。編譯器會根據函數的稱號跟參數範例生成一個唯一的標識符,當挪用運算符時,編譯器會根據這個標識符在順序中查找對應的重載函數。假如找到,則停止挪用;假如不找到,或許找到的函數與參數不婚配,編譯器將報錯。

注意事項

  1. 並非全部的運算符都可能被重載,比方?:.運算符。
  2. 重載運算符時不克不及改變運算符的優先次序。
  3. 至少有一個操縱數必須是用戶自定義範例。 經由過程正確地重載運算符,可能使代碼愈加直不雅跟易於懂得,同時保持代碼的可保護性。
相關推薦