日本国产亚洲-日本国产一区-日本国产一区二区三区-日本韩国欧美一区-日本韩国欧美在线-日本韩国欧美在线观看

當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁(yè)面

面面俱到  ----重載(再轉(zhuǎn))

面面俱到 ----重載(再轉(zhuǎn))

更新時(shí)間:2022-04-27 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):

面面俱到

----重載

作者:HolyFire

面面俱到說(shuō)的是一件事考慮到了很多方面。有的時(shí)候我們的一句話適用于很多方面,而這些方面有些類似。比方說(shuō)加法,加法可以用于,整數(shù)和有理數(shù)。在C++里可以用兩個(gè)函數(shù)來(lái)實(shí)現(xiàn)這個(gè)目的。

int intadd( int v1 , int v2 )

{

returnv1+v2;

}

float floatadd( float v1 , float v2 )

{

returnv1+v2;

}

使用的方式是這樣的

int ia = 1 , ib = 2 , iab = 0;

float fa = 1.0 , fb = 2.0 , fab = 0.0;

iab = intadd( ia ,ib );

fab = floatadd( fa , fb );

這樣看起來(lái)很不直觀,可讀性不強(qiáng),我們的目的是讓人一眼就可以看出是在做相加運(yùn)算。

聰明的讀者可能發(fā)現(xiàn),兩個(gè)函數(shù)的返回值和參數(shù)并不一樣,這樣就可以區(qū)別開兩個(gè)不同的行為。這個(gè)特性可不可以利用呢,答案是可以,C++貼心的為我們做好了一切。原理很簡(jiǎn)單,將函數(shù)的返回值和參數(shù)用一種可逆的編碼方法變成一個(gè)字符串,安插在函數(shù)名后面,編譯器向用戶屏蔽這一切,用戶可以用同一個(gè)名字來(lái)使用不同的函數(shù)。

就是這樣

int add( int v1 , int v2 )

{

returnv1+v2;

}

float add( float v1 , float v2 )

{

returnv1+v2;

}

int ia = 1 , ib = 2 , iab = 0;

float fa = 1.0 , fb = 2.0 , fab = 0.0;

iab = add( ia ,ib );

fab = add( fa , fb );

哦~~~~,編譯通過(guò)了,結(jié)果也運(yùn)行無(wú)誤。

這樣的代碼看上去要比原來(lái)的好讀多了,我們可以略過(guò)我們不感興趣的那些東西。

重載的另一個(gè)方面是可以重載運(yùn)算符,不同的是,它需要使用一個(gè)關(guān)鍵字operator。這樣就可以用自己的方式來(lái)使用運(yùn)算符了。那么立刻用運(yùn)算符來(lái)改寫上面的一切吧

int operator + ( int v1 , int v2 )

{

returnv1+v2;

}

float operator + ( float v1 , float v2 )

{

returnv1+v2;

}

int ia = 1 , ib = 2 , iab = 0;

float fa = 1.0 , fb = 2.0 , fab = 0.0;

iab = ia + ib ;

fab = fa + fb;

哦~~~,這段代碼真是太漂亮了,可是不實(shí)用,為什么,用過(guò)C++的人都知道,象int,float這類的基本類型,本來(lái)就可以直接用運(yùn)算符,那么,就來(lái)一個(gè)不是基本類型的吧。復(fù)數(shù)類在C++里可不是基本類型哦。

在這個(gè)例子里實(shí)現(xiàn)了complex類運(yùn)算符+的重載,并重載了<<運(yùn)算符,讓ostream可以接受complex的輸出。

改變運(yùn)算符原來(lái)的意義并不是一個(gè)好主意,應(yīng)該盡量保證運(yùn)算符原來(lái)的意義,我們使用它的本意就在于讓程序易讀易懂,書寫方便,iostream中的<<和>>是由于人們大量使用形成慣例后的產(chǎn)物,他們?cè)瓉?lái)的意義是做移位運(yùn)算。

#include <iostream>

unsing namespace std;

class complex{

private:

int real;

int image;

public:

complex( int _real = 0 , int _image = 0 ) : real(_real),image(_image) {}

int& Real(){ return real; }

int& Image(){ return image; }

complex operator + ( complex const& v )

{

complex w( real + v.real , image + v.image );

return w;

}

};

ostream& operator << ( ostream& out , complex& v )

{

if( v.Real() )

out << v.Real() ;

if( v.Image() > 0 )

cout << " + " ;

else if( v.Image() == 0 )

return cout;

else

cout << " - " ;

cout << v.Image() <<"i";

return out;

}

void main()

{

complex w( 1 , 2 ) , v( 3 , 4);

cout << (w + v) << endl;

}

代碼看起來(lái)很簡(jiǎn)潔,可讀性很強(qiáng)。

我們可以看出<<失去了他原來(lái)的意義,而變成了ostream類的接口,其實(shí)重載運(yùn)算符在本質(zhì)上和重載函數(shù)是一樣的。

使用重載的目的就是提高代碼的可讀性,運(yùn)用得好還可以提高可復(fù)用程度。

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

主站蜘蛛池模板: www.在线视频 | 亚洲高清不卡视频 | 麻豆xfplay国产在线观看 | 成人免费公开视频 | 亚洲精品欧美精品 | 99久久伊人 | 色婷婷综合久久久久中文一区二区 | 国产一区二区三区不卡在线观看 | 日韩激情中文字幕 | 久久精品中文字幕不卡一二区 | 2021年韩国r级理论片在线观看 | eeuss久久久精品影院 | 欧美精品综合一区二区三区 | 人人澡人摸人人爽歪歪 | 欧美二区在线观看 | 99热久久国产精品这里有9 | 日韩小视频在线观看 | 视频二区 中文字幕 欧美 | 丁香六月在线视频 | 日韩国产欧美一区二区三区 | 国产精品v片在线观看不卡 国产精品www夜色影视 | 久久精品国产视频在热 | 欧美日韩一区二区不卡 | 天天操夜夜操狠狠操 | 成人免费观看www视频 | 亚洲 欧美 中文 日韩欧美 | 中文字幕 国产精品 | 美女视频永久黄网站在线观看 | 久久精品国产精品亚洲红杏 | 国产亚洲日本 | 在线中文字幕第一页 | 午夜福利毛片 | 久久精品免费大片国产大片 | 欧美亚洲人成网站在线观看刚交 | 最近高清中文字幕大全免费1 | 亚洲成 人a影院青久在线观看 | 国产xxx| 国产精品成人亚洲 | 久久综合综合久久狠狠狠97色 | 久久精品人人做人人看 | 亚洲欧美日韩高清中文在线 |