• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

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

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

        更新時間:2022-04-27 文章作者:未知 信息來源:網絡 閱讀次數:

        面面俱到

        ----重載

        作者: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類的接口,其實重載運算符在本質上和重載函數是一樣的。

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

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: 亚洲Aⅴ无码一区二区二三区软件 亚洲AⅤ视频一区二区三区 | 免费看男女下面日出水视频| 成人A级毛片免费观看AV网站| 毛色毛片免费观看| 亚洲永久在线观看| 亚洲大码熟女在线观看| CAOPORM国产精品视频免费| 国产精品99久久免费观看| 18禁止观看免费私人影院| 内射无码专区久久亚洲| 国产在亚洲线视频观看| 久久A级毛片免费观看| 国产一卡二卡≡卡四卡免费乱码| 亚洲色偷精品一区二区三区 | 国产一二三四区乱码免费| 美丽的姑娘免费观看在线播放| 成人亚洲综合天堂| jizz免费在线影视观看网站| 中文字幕亚洲电影| 亚洲AV无码一区二区三区网址 | 亚洲级αV无码毛片久久精品| 亚洲国产AV一区二区三区四区| 日韩a级毛片免费视频| 久久亚洲AV成人无码国产| 成年网站免费入口在线观看| 免费H网站在线观看的| 亚洲精品无码久久一线| **毛片免费观看久久精品| 中文字幕乱码亚洲精品一区| 免费女人高潮流视频在线观看| 中文字幕亚洲一区二区三区| A级毛片高清免费视频在线播放| 国产午夜无码视频免费网站| 一区二区在线免费视频| 日韩亚洲国产综合久久久| 国产成人AV免费观看| 亚洲乱码一区二区三区国产精品| 亚洲人成人网站在线观看| 精品一区二区三区免费毛片| 国产亚洲人成无码网在线观看| 韩国免费一级成人毛片|