日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

重载函数和重载运算符

發(fā)布時(shí)間:2023/11/30 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 重载函数和重载运算符 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

C++允許在同一個(gè)作用域中的某個(gè)函數(shù)和運(yùn)算符指定多個(gè)定義,分別稱(chēng)為函數(shù)重載和運(yùn)算符重載。

重載聲明是指一個(gè)與之前已經(jīng)在該作用域內(nèi)聲明過(guò)的函數(shù)或方法具有相同名稱(chēng)的聲明,但他們的參數(shù)列表和定義(實(shí)現(xiàn))不相同。

當(dāng)調(diào)用一個(gè)重載函數(shù)或重載運(yùn)算符時(shí),編譯器通過(guò)把函數(shù)所使用的參數(shù)類(lèi)型和定義中的參數(shù)類(lèi)型進(jìn)行比較,決定選用最合適的定義。

選擇最合適的重載函數(shù)或重載運(yùn)算符的過(guò)程,稱(chēng)為重載決策。

?

C++函數(shù)重載

在同一個(gè)作用域內(nèi),可以聲明幾個(gè)功能類(lèi)似的同名函數(shù),但是這些同名函數(shù)的形式參數(shù)(參數(shù)個(gè)數(shù),類(lèi)型或者順序)必須不同,不能僅通過(guò)返回類(lèi)型的不同來(lái)重載函數(shù)。

/*** overload.cpp ***/ #include<iostream> using namespace std;class printData {public:void print(int i){cout << "integer is : " << i << endl;}void print(double f){cout << "flota is : " << f << endl;}void print(char c[]){cout << "char is : " << c << endl;} };int main() {printData pd;pd.print(5);pd.print(300.1);char c[] = "hello C++";pd.print(c);return 0; }

運(yùn)行結(jié)果:

exbot@ubuntu:~/wangqinghe/C++/20190807$ vim overload.cpp

exbot@ubuntu:~/wangqinghe/C++/20190807$ g++ overload.cpp -o overload

exbot@ubuntu:~/wangqinghe/C++/20190807$ ./overload

integer is : 5

flota is : 300.1

char is : hello C++

?

運(yùn)算符重載:

我們可以重新定義或重在大部分C++內(nèi)置的運(yùn)算符。這樣就可以使用自定義的運(yùn)算符了。

重載的運(yùn)算符是帶有特殊名稱(chēng)的函數(shù),函數(shù)名是由關(guān)鍵字operator和其后要重載的運(yùn)算符號(hào)構(gòu)成。和其他函數(shù)一樣,重載運(yùn)算符有一個(gè)返回類(lèi)型和一個(gè)參數(shù)列表。

Box operator+(const Box&);

?

聲明加法運(yùn)算符用于把兩個(gè)Box對(duì)象相加,返回最終的的Box對(duì)象。大多數(shù)重載運(yùn)算符可被定義為普通的非成員函數(shù)或被定義為類(lèi)成員函數(shù)。

如果我們定義上面的的函數(shù)為類(lèi)的非成員函數(shù),那么我們需要為每次操作傳遞兩個(gè)參數(shù)。如下所示:

Box operator+(const Box&, const Box&);

下面實(shí)例中,對(duì)象作為參數(shù)進(jìn)行傳遞,對(duì)象的屬性使用this運(yùn)算符進(jìn)行訪(fǎng)問(wèn):

/***

overfun.cpp

***/

#include<iostream>

using namespace std;

?

class Box

{

??? public:

??????? Box(double l = 2.0,double b = 2.0,double h = 2.0)

??????? {

??????????? length = l;

??????????? breadth = b;

??????????? height = h;

??????? }

??????? double getVolume()

??????? {

??????????? return length*breadth*height;

??????? }

??????? Box operator+(const Box& b)

??????? {

??????????? Box box;

??????????? box.length = this->length+b.length;

??????????? box.breadth = this->breadth+b.breadth;

??????????? box.height = this->height + b.height;

??????????? return box;

??????? }

??? private:

??????? double length;

??????? double breadth;

??????? double height;

};

?

int main()

{

??? Box box1(3.3,1.2,1.5);

??? Box box2(8.5,6.0,2.0);

??? Box box3;

??? double volume = 0.0;

?

??? volume = box1.getVolume();

??? cout << "Volume of box1 : " << volume << endl;

?

??? volume = box2.getVolume();

??? cout << "Volume of box2 : " << volume << endl;

?

??? box3 = box1 + box2;

?

??? volume = box3.getVolume();

??? cout << "Volume of box3 : " << volume << endl;

?

??? return 0;

}

運(yùn)行結(jié)果:

exbot@ubuntu:~/wangqinghe/C++/20190808$ g++ overfun.cpp -o overfun

exbot@ubuntu:~/wangqinghe/C++/20190808$ ./overfun

Volume of box1 : 5.94

Volume of box2 : 102

Volume of box3 : 297.36

?

可重載運(yùn)算符:

雙目算數(shù)運(yùn)算符

+,-,*,/,%

關(guān)系運(yùn)算符

==,!=,<,>,<= ,>=

邏輯運(yùn)算符

|| , &&? , !

單目運(yùn)算符

+(正),-(負(fù)),*(指針),&(取地址)

自增自減運(yùn)算符

++,--

位運(yùn)算符

| , &,~,^, ?<< , >>

賦值運(yùn)算符

=,+=,-=,*=,/=,%=,&=,|=,^=, <<=,>>=

空間申請(qǐng)與釋放

new,delete,new[].delete[]

其他運(yùn)算符

() (函數(shù)調(diào)用),->(成員訪(fǎng)問(wèn), ,(逗號(hào)),[] (下標(biāo))

?

不可重載運(yùn)算符列表:

.

成員訪(fǎng)問(wèn)運(yùn)算符

.*,->*

成員指針訪(fǎng)問(wèn)運(yùn)算符

::

域運(yùn)算符

seizeof

長(zhǎng)度運(yùn)算符

?:

條件運(yùn)算符

#

預(yù)處理符號(hào)

Attention

  • 運(yùn)算重載符不可以改變語(yǔ)法結(jié)構(gòu)
  • 運(yùn)算重載符不可以改變操作數(shù)個(gè)數(shù)
  • 運(yùn)算重載付不可以改變優(yōu)先級(jí)
  • 運(yùn)算重載符不可以改變結(jié)合性
  • ?

    類(lèi)重載、覆蓋、重定義的區(qū)別:

    重載指的是函數(shù)具有不同的參數(shù)列表,而函數(shù)名相同的函數(shù)。重載要求參數(shù)列表必須不同,比如參數(shù)的類(lèi)型不同、參數(shù)的個(gè)數(shù)不同,參數(shù)的順序不同。因?yàn)橹剌d要求參數(shù)列表必須不同。(同一類(lèi)中)

    覆蓋是存在類(lèi)中,子類(lèi)重寫(xiě)從基類(lèi)繼承過(guò)來(lái)的函數(shù)。被重寫(xiě)的函數(shù)不能是static的。必須是virtual的。但函數(shù)名、返回值、參數(shù)列表都必須和基類(lèi)相同(發(fā)生在基類(lèi)和子類(lèi))。

    重定義也叫做隱藏,子類(lèi)重新定義父類(lèi)中有相同名稱(chēng)的非虛函數(shù)(參數(shù)列表可以不同)。(發(fā)生在子類(lèi)和基類(lèi))。

    轉(zhuǎn)載于:https://www.cnblogs.com/wanghao-boke/p/11319273.html

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

    總結(jié)

    以上是生活随笔為你收集整理的重载函数和重载运算符的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。