• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            Impossible is nothing  
              愛過知情重醉過知酒濃   花開花謝終是空   緣份不停留像春風(fēng)來又走   女人如花花似夢(mèng)
            公告
            日歷
            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345
            統(tǒng)計(jì)
            • 隨筆 - 8
            • 文章 - 91
            • 評(píng)論 - 16
            • 引用 - 0

            導(dǎo)航

            常用鏈接

            留言簿(4)

            隨筆分類(4)

            隨筆檔案(8)

            文章分類(77)

            文章檔案(91)

            相冊(cè)

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

             
              

            一個(gè)函數(shù)在一個(gè)特定的域中被多次聲明時(shí),編譯器解析第二個(gè)及后面函數(shù)依照下面步驟:

            1.參數(shù)個(gè)數(shù)或類型不同,則認(rèn)為是重載
             // 重載函數(shù)
             void print( const string & );
             void print( vector<int> & );
            2.函數(shù)返回類型和參數(shù)表完全相同,則認(rèn)為第二個(gè)函數(shù)是第一個(gè)函數(shù)的重復(fù)聲明
             參數(shù)表的比較過程與參數(shù)名無關(guān)
            3.如果兩個(gè)函數(shù)的參數(shù)表相同但是返回類型不同則第一個(gè)聲明被視為第一個(gè)的錯(cuò)
            誤重復(fù)聲明會(huì)被標(biāo)記為編譯錯(cuò)誤,例如
             unsigned int max( int i1, int i2 );
             int max( int , int ); // 錯(cuò)誤: 只有返回類型不同
            函數(shù)的返回類型不足以區(qū)分兩個(gè)重載函數(shù)
            4.如果在兩個(gè)函數(shù)的參數(shù)表中只有缺省實(shí)參不同則第二個(gè)聲明被視為第一個(gè)的重
            復(fù)聲明例如
             // 聲明同一函數(shù)
             int max( int *ia, int sz );
             int max( int *, int = 10 );

             typedef 名為現(xiàn)有的數(shù)據(jù)類型提供了一個(gè)替換名它并沒有創(chuàng)建一個(gè)新類型因此如果
            兩個(gè)函數(shù)參數(shù)表的區(qū)別只在于一個(gè)使用了typedef 而另一個(gè)使用了與typedef 相應(yīng)的類型
            則該參數(shù)表不被視為不同的下列calc()的兩個(gè)函數(shù)聲明被視為具有相同的參數(shù)表第二個(gè)
            聲明導(dǎo)致編譯時(shí)刻錯(cuò)誤因?yàn)殡m然它聲明了相同的參數(shù)表但是它聲明了與第一個(gè)不同的返
            回類型
            // typedef 并不引入一個(gè)新類型
            typedef double DOLLAR;
            // 錯(cuò)誤: 相同參數(shù)表不同返回類型
            extern DOLLAR calc( DOLLAR );
            extern int calc( double );

             當(dāng)一個(gè)參數(shù)類型是const 或volatile 時(shí)在識(shí)別函數(shù)聲明是否相同時(shí)并不考慮const 和
            volatile 修飾符例如下列兩個(gè)聲明聲明了同一個(gè)函數(shù)
            // 聲明同一函數(shù)
            void f( int );
            void f( const int );
            參數(shù)是const 這只跟函數(shù)的定義有關(guān)系它意味著函數(shù)體內(nèi)的表達(dá)式不能改變參數(shù)的
            值但是對(duì)于按值傳遞的參數(shù)這對(duì)函數(shù)的用戶是完全透明的用戶不會(huì)看到函數(shù)對(duì)按值
            傳遞的實(shí)參的改變按值傳遞的實(shí)參以及參數(shù)的其他傳遞方式在7.3 節(jié)中討論當(dāng)實(shí)參
            被按值傳遞時(shí)將參數(shù)聲明為const 不會(huì)改變可以被傳遞給該函數(shù)的實(shí)參種類任何int 型的
            實(shí)參都可以被用來調(diào)用函數(shù)f(const int) 因?yàn)閮蓚€(gè)函數(shù)接受相同的實(shí)參集所以剛才給出的
            兩個(gè)聲明并沒有聲明一個(gè)重載函數(shù)函數(shù)f()可以被定義為
            void f( int i ) { }

            void f( const int i ) { }
            然而在同一個(gè)程序中同時(shí)提供這兩個(gè)定義將產(chǎn)生錯(cuò)誤因?yàn)檫@些定義把一個(gè)函數(shù)定義
            了兩次
            但是如果把const 或volatile 應(yīng)用在指針或引用參數(shù)指向的類型上則在判斷函數(shù)聲明

            是否相同時(shí)就要考慮const 和volatile 修飾符
            // 聲明了不同的函數(shù)
            void f( int* );
            void f( const int* );
            // 也聲明了不同的函數(shù)
            void f( int& );
            void f( const


             有時(shí)候沒有必要重載可能也不需要不同的函數(shù)定義在某些情況下缺省實(shí)參可以
            把多個(gè)函數(shù)聲明壓縮為一個(gè)函數(shù)中例如兩個(gè)光標(biāo)函數(shù)
            moveAbs(int,int);
            moveAbs(int,int,char*);
            可以通過第三個(gè)char*型參數(shù)的有無來區(qū)分如果這兩個(gè)函數(shù)的實(shí)現(xiàn)十分類似并且在向
            函數(shù)傳遞參數(shù)時(shí)如果能夠找到一個(gè)char*型缺省實(shí)參可以表示實(shí)參不存在時(shí)的意義則這兩
            個(gè)函數(shù)就可以被合并現(xiàn)在正好有個(gè)這樣的缺省實(shí)參--值為0 的指針
            move( int, int, char* = 0 );
            程序員最好抱這樣的觀點(diǎn)并不是每個(gè)語言特性都是你要攀登的下一座山峰使用語言
            的特性應(yīng)該遵從應(yīng)用的邏輯而不是簡(jiǎn)單地因?yàn)樗拇嬖诰捅仨氁褂盟绦騿T不應(yīng)該勉
            強(qiáng)使用重載函數(shù)只有在必要的地方使用它們才會(huì)讓人感覺自

            using 聲明怎樣影響重載函數(shù)呢using 聲明為一個(gè)名字空間的成員在該聲明出現(xiàn)的域中
            提供了一個(gè)別名下面程序中的using 聲明會(huì)怎么樣呢
            namespace libs_R_us {
            int max( int, int );
            int max( double, double );
            extern void print( int );
            extern void print( double );
            }
            // using 聲明
            using libs_R_us::max;
            using libs_R_us::print( double ); // 錯(cuò)誤
            void func()
            {
            max( 87, 65 ); // 調(diào)用 libs_R_us::max( int, int )
            max( 35.5, 76.6 ); // 調(diào)用 libs_R_us::max( double, double )
            }
            第一個(gè)using 聲明向全局域中引入了兩個(gè)libs_R_us::max()函數(shù)于是我們便可以在func()
            中調(diào)用這兩個(gè)max()函數(shù)函數(shù)調(diào)用時(shí)的實(shí)參類型將決定哪個(gè)函數(shù)會(huì)被調(diào)用第二個(gè)using 聲
            明是個(gè)錯(cuò)誤用戶不能在using 聲明中為一個(gè)函數(shù)指定參數(shù)表對(duì)于libs_R_us::pring()惟一有
            效的using 聲明是
            using libs_R_us::print;


            如果using 聲明向一個(gè)域中引入了一個(gè)函數(shù)而該域中已經(jīng)存在一個(gè)同名的函數(shù)又會(huì)
            怎樣呢記住using 聲明只是一個(gè)聲明由using 聲明引入的函數(shù)就好像在該聲明出現(xiàn)的地
            方被聲明一樣因此由using 聲明引入的函數(shù)重載了在該聲明所出現(xiàn)的域中同名函數(shù)的其
            他聲明例如
            375 第九章 重載函數(shù)
            #include <string>
            namespace libs_R_us {
            extern void print( int );
            extern void print( double );
            }
            extern void print( const string & );
            // libs_R_us::print( int ) 和 libs_R_us::print( double )
            // 重載 print( const string & )
            using libs_R_us::print;
            void fooBar( int ival )
            {
            print( "Value: " ); // 調(diào)用全局 print( const string & )
            print( ival ); // 調(diào)用 libs_R_us::print( int )
            }
            using 聲明向全局域中加入了兩個(gè)聲明一個(gè)是print(int) 一個(gè)是print(double) 這些聲
            明為名字空間libs_R_us 中的函數(shù)提供了別名這些聲明被加入到print()的重載函數(shù)集合中
            它已經(jīng)包含了全局函數(shù)print(const string&) 當(dāng)fooBar()調(diào)用函數(shù)時(shí)所有的print()函數(shù)都將
            被考慮


            如果using 聲明向一個(gè)域中引入了一個(gè)函數(shù)而該域中已經(jīng)有同名函數(shù)且具有相同的參
            數(shù)表則該using 聲明就是錯(cuò)誤的如果在全局域中已經(jīng)存在一個(gè)名為print(int)的函數(shù)則
            using 聲明不能為名字空間libs_R_us 中的函數(shù)聲明別名print(int) 例如
            namespace libs_R_us {
            void print( int );
            void print( double );
            }
            void print( int );
            using libs_R_us::print; // 錯(cuò)誤: print(int) 的重復(fù)聲明
            void fooBar( int ival )
            {
            print( ival ); // 哪一個(gè) print? ::print 還是 libs_R_us::print?
            }


            posted on 2006-02-22 22:47 笑笑生 閱讀(225) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C++語言
             
            Copyright © 笑笑生 Powered by: 博客園 模板提供:滬江博客
            久久精品国产亚洲Aⅴ蜜臀色欲| 久久久久噜噜噜亚洲熟女综合| 久久精品中文字幕大胸| 亚洲欧美一级久久精品| 亚洲av成人无码久久精品| 99久久精品国产免看国产一区| 亚洲一本综合久久| 久久人与动人物a级毛片| 99久久精品国产高清一区二区| 久久久久一级精品亚洲国产成人综合AV区| 久久天天躁狠狠躁夜夜2020老熟妇| 久久99久久无码毛片一区二区| 漂亮人妻被中出中文字幕久久| 精品久久久久久中文字幕| 久久久久久精品无码人妻| 婷婷久久综合九色综合98| 伊人久久综合成人网| 精品久久久无码中文字幕天天| 欧洲精品久久久av无码电影| 久久99精品久久久久久秒播| 久久国产欧美日韩精品| 亚洲一区精品伊人久久伊人 | 精品久久久久久国产| 99久久久精品| 久久久久久国产精品免费无码 | 伊人久久大香线蕉av不变影院| 久久九九亚洲精品| 久久天天躁狠狠躁夜夜躁2O2O| 亚洲国产成人久久综合碰| 久久91这里精品国产2020| 91精品国产91久久久久久蜜臀| 狠狠色丁香婷综合久久| 精品久久久久久无码专区不卡| 综合人妻久久一区二区精品| 精品国产乱码久久久久软件| 香蕉久久夜色精品国产2020| 久久久久无码国产精品不卡| 久久人人爽人人澡人人高潮AV| 久久精品国产精品亚洲艾草网美妙| 久久91综合国产91久久精品| 一级做a爰片久久毛片人呢|