在C++中,操作符重載是指使用相同的操作符來(lái)執(zhí)行不同的操作,具體是通過(guò)定義相應(yīng)的成員函數(shù)或全局函數(shù)來(lái)實(shí)現(xiàn)的。當(dāng)使用操作符對(duì)對(duì)象進(jìn)行操作時(shí),編譯器會(huì)根據(jù)操作符的參數(shù)類(lèi)型和重載函數(shù)的參數(shù)類(lèi)型選擇相應(yīng)的重載函數(shù)來(lái)執(zhí)行操作。
例如,如果我們想要重載加法運(yùn)算符+來(lái)實(shí)現(xiàn)兩個(gè)自定義類(lèi)對(duì)象的加法操作,我們可以通過(guò)重載成員函數(shù)或全局函數(shù)來(lái)實(shí)現(xiàn):
// 重載加法運(yùn)算符+的成員函數(shù)版本
class MyClass {
public:
MyClass operator+(const MyClass& other) {
MyClass result;
// 執(zhí)行加法操作
return result;
}
};
// 重載加法運(yùn)算符+的全局函數(shù)版本
MyClass operator+(const MyClass& obj1, const MyClass& obj2) {
MyClass result;
// 執(zhí)行加法操作
return result;
}
int main() {
MyClass obj1, obj2;
MyClass result1 = obj1 + obj2; // 調(diào)用成員函數(shù)版本
MyClass result2 = operator+(obj1, obj2); // 調(diào)用全局函數(shù)版本
return 0;
}
在上面的例子中,我們分別定義了成員函數(shù)版本和全局函數(shù)版本的加法運(yùn)算符重載函數(shù),通過(guò)這兩種方式可以實(shí)現(xiàn)相同的功能。當(dāng)我們使用加法運(yùn)算符對(duì)兩個(gè)MyClass對(duì)象進(jìn)行操作時(shí),編譯器會(huì)根據(jù)操作符的參數(shù)類(lèi)型選擇調(diào)用對(duì)應(yīng)的重載函數(shù)來(lái)執(zhí)行加法操作。
需要注意的是,操作符重載只是一種語(yǔ)法糖,實(shí)質(zhì)上是通過(guò)函數(shù)調(diào)用來(lái)實(shí)現(xiàn)的,因此重載的函數(shù)只是函數(shù)重載,并沒(méi)有改變操作符的內(nèi)部實(shí)現(xiàn)。