C++中運(yùn)算符重載的規(guī)則語(yǔ)法實(shí)例
運(yùn)算符重載,就是對(duì)已有的運(yùn)算符重新進(jìn)行定義,賦予其另一種功能,以適應(yīng)不同的數(shù)據(jù)類型。
之前就知道運(yùn)算符的重載就是將它重新定義,給它新的功能,為的式符合程序員的要求,一個(gè)例子就是,要將坐標(biāo)相加,但是電腦不知道怎么相加,于是聰明的人就賦予了“+”新的定義。然而一些嚴(yán)格意義上的用法還不是很清楚?,F(xiàn)在就在這總結(jié)一下。
首先運(yùn)算符重載的規(guī)則如下:
①、 C++中的運(yùn)算符除了少數(shù)幾個(gè)之外,全部可以重載,而且只能重載C++中已有的運(yùn)算符。
不能重載的運(yùn)算符只有五個(gè),它們是:成員運(yùn)算符“.”、指針運(yùn)算符“*”、作用域運(yùn)算符“::”、“sizeof”、條件運(yùn)算符“?:”。
②、 重載之后運(yùn)算符的優(yōu)先級(jí)和結(jié)合性都不會(huì)改變。
③、 運(yùn)算符重載是針對(duì)新類型數(shù)據(jù)的實(shí)際需要,對(duì)原有運(yùn)算符進(jìn)行適當(dāng)?shù)母脑?。一般?lái)說(shuō),重載的功能應(yīng)當(dāng)與原有功能相類似,不能改變?cè)\(yùn)算符的操作對(duì)象個(gè)數(shù),同時(shí)至少要有一個(gè)操作對(duì)象是自定義類型。
運(yùn)算符重載為類的成員函數(shù)的一般語(yǔ)法形式為:
函數(shù)類型 operator 運(yùn)算符(形參表) { 函數(shù)體; }
干脆將一些運(yùn)算符重新列出下一下:
可以用作重載的運(yùn)算符:
- 算術(shù)運(yùn)算符:+,-,*,/,%,++,--;
- 位操作運(yùn)算符:&,|,~,^,<<,>>
- 邏輯運(yùn)算符:!,&&,||;
- 比較運(yùn)算符:<,>,>=,<=,==,!=;
- 賦值運(yùn)算符:=,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=;
- 其他運(yùn)算符:[],(),->,,(逗號(hào)運(yùn)算符),new,delete,new[],delete[],->*
下列運(yùn)算符不允許重載:
.,.*,::,?:(上面也說(shuō)了的)
下面給例子
Boxoperator+(const Box&, const Box&);
聲明加法運(yùn)算符用于把兩個(gè) Box 對(duì)象相加,返回最終的 Box 對(duì)象。大多數(shù)的重載運(yùn)算符可被定義為普通的非成員函數(shù)或者被定義為類成員函數(shù)。如果我們定義上面的函數(shù)為類的非成員函數(shù),那么我們需要為每次操作傳遞兩個(gè)參數(shù),如上面所示。
下面給一個(gè)比較完整的代碼:
#include <iostream> using namespace std; class Person{ public: Person(int num) : age(num){} /* 類成員函數(shù) */ int operator+(const Person &temp){ return (this->age+temp.age); } int age; }; /* 非類成員函數(shù) */ int operator-(const Person &a, const Person &b){ return (a.age-b.age); } int main() { Person John(20), Tom(18); cout << John+Tom << endl; cout << John-Tom << endl; return 0; }
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
C++入門之實(shí)現(xiàn)十步萬(wàn)度游戲
這篇文章主要介紹了C++入門實(shí)現(xiàn)十步萬(wàn)度游戲,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-10-10解析如何利用switch語(yǔ)句進(jìn)行字符統(tǒng)計(jì)
本篇文章是對(duì)如何利用switch語(yǔ)句進(jìn)行字符統(tǒng)計(jì)的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06淺談C#中List<T>對(duì)象的深度拷貝問(wèn)題
下面小編就為大家?guī)?lái)一篇淺談C#中List<T>對(duì)象的深度拷貝問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01深入了解C語(yǔ)言結(jié)構(gòu)化的程序設(shè)計(jì)
這篇文章主要介紹了C語(yǔ)言編程中程序的一些基本的編寫優(yōu)化技巧,文中涉及到了基礎(chǔ)的C程序內(nèi)存方面的知識(shí),非常推薦!需要的朋友可以參考下2021-07-07基于matlab實(shí)現(xiàn)DCT數(shù)字水印嵌入與提取
數(shù)字水印技術(shù)是將一些標(biāo)識(shí)信息直接嵌入數(shù)字載體當(dāng)中,?或間接表示在信號(hào)載體中,?且不影響原載體的使用價(jià)值。本文主要為大家介紹了基于matlab如何實(shí)現(xiàn)數(shù)字水印的嵌入與提取,感興趣的可以學(xué)習(xí)一下2022-01-01C語(yǔ)言中const和define的區(qū)別你了解嘛
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言中const和define的區(qū)別,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-03