六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

面面俱到 ----重載(再轉)

[摘要]面面俱到----重載作者:HolyFire面面俱到說的是一件事考慮到了很多方面。有的時候我們的一句話適用于很多方面,而這些方面有些類似。比方說加法,加法可以用于,整數和有理數。在C++里可以用兩個函...
面面俱到

----重載

作者:HolyFire

面面俱到說的是一件事考慮到了很多方面。有的時候我們的一句話適用于很多方面,而這些方面有些類似。比方說加法,加法可以用于,整數和有理數。在C++里可以用兩個函數來實現這個目的。

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 );

這樣看起來很不直觀,可讀性不強,我們的目的是讓人一眼就可以看出是在做相加運算。

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

就是這樣

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 );

哦~~~~,編譯通過了,結果也運行無誤。

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

重載的另一個方面是可以重載運算符,不同的是,它需要使用一個關鍵字operator。這樣就可以用自己的方式來使用運算符了。那么立刻用運算符來改寫上面的一切吧

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;

哦~~~,這段代碼真是太漂亮了,可是不實用,為什么,用過C++的人都知道,象int,float這類的基本類型,本來就可以直接用運算符,那么,就來一個不是基本類型的吧。復數類在C++里可不是基本類型哦。

在這個例子里實現了complex類運算符+的重載,并重載了<<運算符,讓ostream可以接受complex的輸出。

改變運算符原來的意義并不是一個好主意,應該盡量保證運算符原來的意義,我們使用它的本意就在于讓程序易讀易懂,書寫方便,iostream中的<<和>>是由于人們大量使用形成慣例后的產物,他們原來的意義是做移位運算。

#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;

}

代碼看起來很簡潔,可讀性很強。

我們可以看出<<失去了他原來的意義,而變成了ostream類的接口,其實重載運算符在本質上和重載函數是一樣的。

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



主站蜘蛛池模板: 色综合久久88中文字幕 | 婷婷综合缴情亚洲五月伊 | 欧美一级视屏 | 网站在线观看免费 | 日本不卡网 | 四虎新地址| 色黄大片 | 一级做a爰片久久毛片一 | 天天射天天干天天 | 中文在线最新版天堂8 | 综合网色 | 亚洲黄色第一页 | 日本最新中文字幕 | 午夜免费网站 | 日韩精品亚洲一级在线观看 | 日本一区二区不卡视频 | 最新国产网址 | 天天视频色版 | 亚洲福利国产 | 欧美一区二区久久精品 | 中文在线第一页 | 天天干狠狠操 | 在线亚洲精品自拍 | 欧美一级黄色片在线观看 | 伊人蕉久中文字幕无码专区 | 天天躁日日躁狠狠躁中文字幕 | 一级做a爰片性色毛片刺激 一级做a爰片欧美一区 | 污污免费在线观看 | 全黄一级裸片视频免费 | 亚洲一区二区观看 | 欧美爽爽 | 啪啪国产 | 亚洲精品欧美在线 | 亚洲图片欧美另类 | 日韩香蕉视频 | 日本另类αv欧美另类aⅴ | 日本免费爱爱视频 | 夜夜揉揉日日人人视频 | 四虎影视免费永久在线观看黄 | 日韩 欧美 国产 亚洲 制服 | 亚洲综合图区 |