
操作符重載;運算元多載
Discusses changes to operator overloading.
讨論運算符重載的更改。
More consistent, symmetric operator overloading.
更一緻的、對稱的操作符重載。
In Listing 2, you can see the operator overloading I set up in Listing 1 in action.
在清單2中,可以看到我在清單1中設置的操作符重載的效果。
That was the first time I was introduced to the concept of operator overloading.
這是我第一次被介紹給了操作符重載的概念。
Operator overloading that works well with generics and built-in primitive types.
運算子多載,適用于泛型及内建基本型别。
在編程領域,運算符重載(Operator Overloading) 是一種強大的特性,它允許程式員為自定義的數據類型(如類或結構體)重新定義或賦予内置運算符(如 +
, -
, *
, /
, ==
, <<
等)新的含義和行為。
核心概念解釋:
+
)本身是預定義的符號,用于對内置數據類型(如 int
, float
, char
)執行特定操作(如加法)。例如,5 + 3
的結果是 8
。Complex
,一個表示數學向量的類 Vector
,或一個表示字符串的類 MyString
)時,直接使用内置運算符(如 complex1 + complex2
)通常沒有意義或會導緻編譯錯誤,因為編譯器不知道如何對自定義類型執行該操作。operator
後跟要重載的運算符符號組成(例如 operator+
)。當編譯器遇到該運算符作用于自定義類型時,它會調用程式員定義的相應函數,而不是執行默認的内置操作。Complex
類,可以定義一個成員函數 Complex operator+(const Complex& rhs) const
。當執行 complex1 + complex2
時,編譯器會将其解釋為 complex1.operator+(complex2)
,并執行該函數中定義的複數加法邏輯(實部加實部,虛部加虛部)。關鍵目的與價值:
vector1 + vector2
比 vector1.add(vector2)
或 addVectors(vector1, vector2)
更清晰、更符合直覺。常見應用場景舉例:
+
, -
, *
, /
等算術運算符。+
(連接)、==
(比較相等)、<<
(輸出流)等。[]
(下标訪問)。<<
(輸出)和 >>
(輸入)運算符,使自定義類型能像内置類型一樣方便地進行流操作。==
, !=
, <
, >
, <=
, >=
等關系運算符,定義自定義類型的比較規則。重要注意事項:
+
是二元運算符,重載時也必須有兩個操作數(其中一個通常是調用對象本身)。+
應該執行某種“加法”或“連接”,而不是減法)。權威參考來源:
總而言之,運算符重載是面向對象編程和多态性的一種表現形式,它通過賦予内置運算符操作自定義類型的能力,極大地提升了代碼的表達力、簡潔性和可維護性,使得自定義類型能夠無縫地融入語言的語法體系中。
Operator overloading(操作符重載)是面向對象編程中的一種特性,允許開發者重新定義已有操作符(如+、-、==等)在自定義類或結構中的行為。它的核心目的是讓代碼更直觀、簡潔,使自定義類型的使用方式與内置類型(如整數、字符串)一緻。
本質
通過定義特定名稱的成員函數(如C++的operator+
或Python的__add__
),賦予操作符對自定義對象的新功能。例如,用+
實現兩個複數對象的加法,而非僅限于數值運算。
常見使用場景
list1 + list2
)。obj1 == obj2
)。實現方式
ClassName operator+(const ClassName& obj)
)。__add__
、__eq__
)定義操作符行為。operator
關鍵字聲明靜态方法。class Vector {
public:
int x, y;
Vector operator+(const Vector& v) {
return Vector{x + v.x, y + v.y};
}
};
// 使用:Vector v3 = v1 + v2; // 直接相加兩個向量對象
+
實現減法等反直覺操作。如需進一步了解語法細節,建議參考具體語言的官方文檔或教程資源。
【别人正在浏覽】