• <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>

            杰 & C++ & Python & DM

            2012年9月6日

            命令行下Java的編譯及運(yùn)行(2)


              上篇博文中說明了如何通過命令編譯及運(yùn)行自己的Java文件。但是當(dāng)前都是以項(xiàng)目為單位的,如何組織項(xiàng)目中的文件以及對項(xiàng)目的編譯運(yùn)行,是命令行編譯主要解決的問題。

              1. 項(xiàng)目組織
              我們以下面的項(xiàng)目作為樣例來說明:
            Test/
            |-- Test.jar
            |-- classes
            |   |-- Main.class
            |   |-- OutterTest.class
            |   `-- inner
            |       `-- InnerTest.class
            |-- run.py
            |-- run.sh
            `
            -- src
                
            |-- Main.java
                
            |-- OutterTest.java
                `
            -- inner
                    `
            -- InnerTest.java

              上面是一個項(xiàng)目:Test。其中,有兩個文件夾,src用來放置所有的源代碼,也就是.java文件;classes用來放置相應(yīng)的.class文件。Test.jar是最終生成的jar文件,run.py和run.sh是項(xiàng)目的腳本文件。下面列出三個.java文件,只是簡單的顯示一句話:
            // Main.java
            import inner.*;
            public class Main
            {
                
            public static void main(String[] args)
                {
                    System.out.println(
            "main: hello word!");

                    OutterTest out1 
            = new OutterTest();
                    out1.hello();

                    InnerTest in1 
            = new InnerTest();
                    in1.hello();
                }
            }

            // OutterTest.java
            public class OutterTest
            {
                    
            public void hello()
                    {
                            System.out.println(
            "Hello OutterTest!");
                    }
            }

            // InnerTest.java
            package inner;
            public class InnerTest
            {
                    
            public void hello()
                    {
                            System.out.println(
            "Hello InnerTest!");
                    }
            }

              注意上面的InnerTest類,它在package inner中,所以將InnerTest.java放在inner文件夾下,這樣可以保證統(tǒng)一。在Eclipse中,新建一個類時,會讓你填寫package名,然后Eclipse會為你新新建一個相應(yīng)的文件夾。

              2. 項(xiàng)目編譯
              
              javac -d classes src/*.java src/inner/*.java
              
              由上一篇知道,javac中-d表示”指定存放生成的類文件的位置“,也就是將生成的.class文件放在-d指定的文件夾中。需要指出的是,classes文件夾是手動建立的。
              另外,javac還可以批量編譯.java文件,上面的命令表示編譯src目錄下的所以.java文件、編譯src/inner目錄下的所有.java文件。這樣就可以批量編譯.java文件,并將生成的.class文件放在classes文件夾中。這里同樣要指出一點(diǎn),因?yàn)閜ackage inner的關(guān)系,會自動建立inner文件夾,并將所有package inner下的類文件.class放在classes/inner下。

              3.項(xiàng)目打包
              
              jar -cvf Test.jar -C classes/ .

              這個命令將會把classes下的所有文件(包括.class和文件夾等)打包為Test.jar文件。
              上篇博客中,介紹了參數(shù)-C的意義:-C  更改為指定的目錄并包含其中的文件,如果有任何目錄文件, 則對其進(jìn)行遞歸處理。它相當(dāng)于使用 cd 命令轉(zhuǎn)指定目錄下。
              注意后面的"."的用法,jar可以遞歸的打包文件夾,"."表示是當(dāng)前文件夾。如果執(zhí)行命令“jar -cvf Test.jar .”,表示將當(dāng)前目錄下的所有文件及文件夾打包。所以上面的命令的意思就是“將classes下的所有文件打包為Test.jar”。

              4.項(xiàng)目運(yùn)行
              
              java -cp Test.jar Main

              通過上面的命令就可以執(zhí)行Test.jar中的Main.class。其中,cp指定了jar文件的位置。

              5. 腳本文件
              通過上面的幾步,我們就可以完成整個項(xiàng)目的編譯和運(yùn)行。而且,通過src和classes兩個文件夾將源文件和目標(biāo)文件分開,使項(xiàng)目比較整潔。但是如果每次編譯、運(yùn)行都要輸入上面一系列命令,還是比較繁瑣的,尤其當(dāng)項(xiàng)目文件較多時,這時通過腳本文件管理整個項(xiàng)目是明智的選擇。
              下面是項(xiàng)目的腳本文件run.py
            import os
            import sys

            if __name__ == "__main__":

                    ProjectJar 
            = "Test.jar"

                    
            if sys.argv[1== "c":
                            
            print("Compile program.")

                            src 
            = "src/*.java src/inner/*.java"
                            os.system(
            "javac -d classes " + src)
                            os.system(
            "jar -cvf " + ProjectJar + " -C classes/ .")

                    
            if sys.argv[1== "r":
                            
            print("Run program.")
                            os.system(
            "java -cp " + ProjectJar + " Main")

                    
            print("Over!")

              通過這個腳本文件,可以使用"python run.py c"完成項(xiàng)目的編譯、打包;使用"python run.py r"運(yùn)行項(xiàng)目。

              通過這篇文章,我們已經(jīng)了解了Java項(xiàng)目的管理方法,以及編譯、打包、運(yùn)行的命令行,最后介紹了使用腳本文件有效管理項(xiàng)目。
              附件中包含整個項(xiàng)目,同時還包括一個run.sh,方便不熟悉python的人查看。
              附件: Test.tar

            posted @ 2012-09-06 18:56 jaysoon 閱讀(3362) | 評論 (0)編輯 收藏

            2012年8月22日

            命令行下Java的編譯及運(yùn)行(1)


              當(dāng)前大部分開發(fā)者在開發(fā)Java程序時使用Eclipse,它可以方便的進(jìn)行程序的編譯、打包和運(yùn)行。但是不使用IDE,在完全的命令行下進(jìn)行Java開發(fā)者從未用過的。在命令行下進(jìn)行開發(fā)不是用來在展現(xiàn)自己有多牛,而是通過命令行開發(fā),可以對Java的編譯、jar包等各個部分有一個深入了解。
              下面的幾篇博客將會對Java的編譯、打包和運(yùn)行方法由淺入深的進(jìn)行介紹。
              在這里使用的操作系統(tǒng)是Linux,并提供相應(yīng)的shell和python腳本。

              首先介紹一下三個常用的命令:javac、jar、java。每個命令都有不同的參數(shù),這些參數(shù)的用法會詳細(xì)介紹。

              1. javac
              javac的功能是對java源代碼進(jìn)行編譯,將后綴為.java的文件編譯為.class的文件。javac的一般格式是
              javac <選項(xiàng)> <源文件>
              例如:
              javac Main.java
              會產(chǎn)生Main.class文件。
              
              javac的常用選項(xiàng)有:
              -classpath <路徑>      指定查找用戶類文件的位置
              -cp <路徑>                指定查找用戶類文件的位置(與上面的選項(xiàng)一樣,cp是classpath的簡寫)
              -d <目錄>                指定存放生成的類文件的位置

              2.jar
              jar的功能是根據(jù)選項(xiàng)將指定的一些.class文件打包為一個jar包。jar的一般格式是
              jar {ctxui}[vfm0Me] [jar-文件] [manifest-文件] [-C 目錄] 文件名 ...
              例如,
              jar cvf Test.jar Main.class Bar.class
              它將Main.class和Bar.class打包為一個文件Test.jar。

              jar命令的選項(xiàng)比較多,用到選項(xiàng)包括:
              -c  創(chuàng)建新的歸檔文件
              -t  列出歸檔目錄
              -x  從檔案中提取指定的 (或所有) 文件
              -u  更新現(xiàn)有的歸檔文件
              -v  在標(biāo)準(zhǔn)輸出中生成詳細(xì)輸出
              -f  指定歸檔文件名
              -m  包含指定清單文件中的清單信息
              -e  為捆綁到可執(zhí)行 jar 文件的獨(dú)立應(yīng)用程序,指定應(yīng)用程序入口點(diǎn)
              -C  更改為指定的目錄并包含其中的文件,如果有任何目錄文件, 則對其進(jìn)行遞歸處理。

              例如,
              上例中的cvf參數(shù),分別表示創(chuàng)建新的jar文件、創(chuàng)建時顯示jar包的信息(可以執(zhí)行看一下)、指定jar包名為Test.jar。
              jar tf Test.jar      查看Test.jar的內(nèi)容,其中t表示列出jar包內(nèi)容,f指定jar包名
              jar xf Test.jar      解壓Test.jar文件
              jar xf Test.jar Main.class      僅解壓Test.jar中的Main.class文件
              這里要指出的是,f/m/e都指定一個名稱(jar包名, 清單文件名和入口點(diǎn)名稱),相應(yīng)的名稱順序與參數(shù)的順序要一致。

              3.java
              java的功能是執(zhí)行應(yīng)用程序。java的一般格式是
              執(zhí)行一個類:    java [ options ] class [ argument ... ]
              執(zhí)行一個jar包:java [ options ] -jar file.jar [ argument ... ]
              例如:
              java Main
              執(zhí)行Main.class,注意上面沒有.class后綴
              java Test.jar
              執(zhí)行一個jar包,這個jar包中要指定了程序入口點(diǎn)(通過在MANIFEST.MF文件中指定)。

              常用的java的選項(xiàng):
              -classpath<類搜索路徑>    指定用戶類文件的位置,可能為文件夾、zip、jar文件


              總結(jié)
              通過這篇內(nèi)容,我們應(yīng)用學(xué)會了如何使用javac編譯自己的類,并使用java執(zhí)行自己的類。但是關(guān)于打包的操作及jar的執(zhí)行比較復(fù)雜,將在以后繼續(xù)介紹。


              

            posted @ 2012-08-22 15:45 jaysoon 閱讀(631) | 評論 (0)編輯 收藏

            2012年8月17日

            Java中計算中文的MD5值

            Java中計算中文的MD5值
              前幾天的工作中,需要計算中文的MD5值,計算的函數(shù)接口及調(diào)用方式如下:
            public static String getMD5(byte[] source);
            String s 
            = "中文編碼";
            String md5_value 
            = getMD5(s.getBytes());
              其中g(shù)etBytes函數(shù)使用平臺默認(rèn)的字符集將string編碼為byte序列。由于平臺的中文編碼方式可能不同,所以同一中文經(jīng)過getBytes得到的二進(jìn)制是不一樣的。為保證每次得到的結(jié)果一致,或者使用指定的編碼方式得到byte序列,應(yīng)該在getBytes中使用參數(shù)。
            String md5_value = getMD5(s.getBytes("utf-8"));
              這樣得到的值就是一樣的。

            posted @ 2012-08-17 15:32 jaysoon 閱讀(1314) | 評論 (1)編輯 收藏

            2012年5月14日

            遇到j(luò)ava與crontab問題


              crontab命令是Unix/Linux中的一個常用命令,用于設(shè)置周期性被執(zhí)行的指令。沒有用過的可以查一下,在運(yùn)行服務(wù)端程序時會經(jīng)常用到。

              程序使用Java讀取一個含有中文的文件,進(jìn)行處理后,將結(jié)果寫到一個結(jié)果文件中。在運(yùn)行的程序時,出現(xiàn)了這樣一個問題:在本地環(huán)境下,運(yùn)行正確;但是當(dāng)使用crontab定時執(zhí)行時,得到的卻是錯誤的結(jié)果。

              經(jīng)過一定的調(diào)研發(fā)現(xiàn)原來是對crontab的機(jī)制沒有弄明白導(dǎo)致的。crontab運(yùn)行程序時,會使用它自己的環(huán)境變量,這個環(huán)境變量與你本地的環(huán)境變量可能會不同。比如,在你本地情況下,環(huán)境變量的語言為en_US.UTF-8,而在crontab中,環(huán)境變量可能是zh_CN.GBK,這樣會導(dǎo)致讀寫文件時——尤其是讀寫中文文件時內(nèi)容編碼錯誤,進(jìn)而導(dǎo)致結(jié)果出錯。

              所以在使用Java讀寫文件時,一定要指定編碼格式,而不是使用環(huán)境變量的格式。例如下面的語句用于讀取utf-8格式的文件

            String encodeType = "utf-8";
            File in_file 
            = new File("test.txt");
            BufferedReader reader 
            = new BufferedReader(new InputStreamReader(new FileInputStream(in_file), encodeType));
              
              網(wǎng)上也有關(guān)于修改crontab環(huán)境變量的方法,但是我不建議使用,因?yàn)橐粋€系統(tǒng)可能是很多人共用的,修改crontab環(huán)境變量可能會引起他人程序的問題,最好修改自己的程序,保證它不依賴具體的環(huán)境變量。



            posted @ 2012-05-14 15:20 jaysoon 閱讀(849) | 評論 (0)編輯 收藏

            2011年7月20日

            算法的態(tài)度

            很多同學(xué)和朋友經(jīng)常向我抱怨說,算法已經(jīng)成為他們學(xué)習(xí)和工作中的一個負(fù)擔(dān)。在他們看來,算法只能應(yīng)付一下考試,在學(xué)習(xí)中沒有任何用處;也有人說,求職過程中考算法純粹是浪費(fèi)精力,在實(shí)際工作中沒有用到任何算法。

            在我的本科四年中,花了大量時間學(xué)習(xí)算法,參加算法比賽——成績很濫,朋友們都說,和我的付出嚴(yán)重不成比例,但是我一點(diǎn)也不后悔花費(fèi)時間學(xué)習(xí)算法。算法讓我在平時的學(xué)習(xí)中應(yīng)對各個科目都從容自如,學(xué)習(xí)起來事半功倍。

            在平時的學(xué)習(xí)交流中,有時看其他人的代碼相當(dāng)別扭,不是看不懂(有時真看不懂),而是很納悶,為什么要這么寫呢,明明有很明顯的順暢的思路,干嗎要寫這么繞呢?我將我覺得正確的思路寫出來的時候,對方也會覺得這樣寫順暢了很多,代碼也小了很多。

            在一般應(yīng)用中,不會說讓你寫一個KMP算法,或者給你設(shè)計一個動態(tài)規(guī)劃的題目讓你來解。但是如果你會這些算法,掌握了這種優(yōu)化的思想,在平時的編寫中會不知不覺的寫出比較高效的代碼。

            有人說,現(xiàn)在中國的軟件現(xiàn)狀就是這樣,不在乎你實(shí)現(xiàn)的有多快,只會在乎你有沒有實(shí)現(xiàn)所有的功能點(diǎn),隨著硬件條件的改善,一般情況下都能滿足要求。這樣說也是沒錯,如果你甘愿只做一名碼工,因?yàn)閷τ谙喈?dāng)大的一部分軟件,效率并不是最重要的,甚至第二、第三重要都排不上。但是對于企業(yè)級的應(yīng)用和軟件的核心部分,往往效率是非常重要的。

            如果將編程和寫作類比的話,可以進(jìn)行這個的比較。編程必須會語言C/C++JavaPython等,寫作也一定要會一個語言漢語、英語、法語,當(dāng)然計算機(jī)語言有效率的優(yōu)劣以及適合的應(yīng)用的場景,而自然語言沒有這種屬性。算法修養(yǎng)之于編程就像文學(xué)修養(yǎng)之于創(chuàng)作,沒有一定的文學(xué)修養(yǎng)就寫不出好的作品,同樣沒有良好的算法修養(yǎng)也創(chuàng)造不出好的代碼。數(shù)據(jù)結(jié)構(gòu)就像寫作中的排比句等,它們是骨架,結(jié)構(gòu)化編程就像是寫作中的段落,它們使得層次分明。

            在靜靜的夜晚,明月透過窗子,照進(jìn)小屋,頓時一種異樣的情懷涌上心頭。這時有下面幾種人,第一種,嚎啕大哭,“媽媽……”;第二種,潸然淚下,“我嚓,想家了是不”;第三種,沉思狀,“有首詩可以表達(dá)這個情懷”,拿起全唐詩,查找了整晚,夜盡天明時,驚呼“找到了,原來是‘舉頭望明月,底頭思故鄉(xiāng)’啊,我記得有的。”;第四種,徘徊低吟“舉頭望明月,底頭思故鄉(xiāng)”;第五種,心中油然而生,“獨(dú)在異鄉(xiāng)為異客,明月千里寄鄉(xiāng)思”。

            同樣地,這也反映了一個程序員算法修養(yǎng)的幾種境界。第一種,菜鳥,不會表達(dá)自己的思想,這種多見于初學(xué)語言的人,只會寫hello world之類程序的人;第二種,入門,可以表達(dá)出自己的想法,但是不懂什么算法,只是憑自己對計算機(jī)語言的理解寫程序,當(dāng)然寫出的程序功能點(diǎn)可能不少,但是不完善,潛在的bug很多;第三種,有一定的算法基礎(chǔ),但是沒有掌握完全,寫程序時有高效的意識,對一些核心程序,看著資料也能寫出相應(yīng)的代碼,但是不能活學(xué)活用;第四種,有不錯的算法修養(yǎng),寫出的代碼清晰高效,可勝任關(guān)鍵代碼的編寫;第五種,有很高的算法修養(yǎng),理解了算法的精髓,自己可以得出算法供世人學(xué)習(xí),一般是大師級人物。國內(nèi)有相當(dāng)一部分程序員就是處于第二階段,他們也有穩(wěn)定的工作,甚至不錯的收入,但是總感覺遇到了瓶頸,自己的能力躊躇不前。

            有人說,現(xiàn)在各種庫都有,那些代碼都非常高效,我只要熟練使用這些庫就行了,不用學(xué)習(xí)算法。可以達(dá)到熟練使用幾個庫的程序員也算是第三階段,但是要想熟練駕馭更多的庫,將庫函數(shù)熟練的使用,沒有一定的算法基礎(chǔ)是不行的。比如,如果你想熟練使用STL庫,那么對各種容器和算法都應(yīng)該有一定的認(rèn)識,什么時候使用list,為什么快排不能應(yīng)用于list?要想回答這些問題,必須掌握初步的算法。

            對于想要在技術(shù)上有一定作為的程序員,沒有算法修養(yǎng),就如同金庸小說中的學(xué)武之人不學(xué)習(xí)內(nèi)功,它可以將外功學(xué)的爐火純清,憑著這份功力可以走遍半個江湖,但是一旦遇到高手就掛了;反之如果有內(nèi)功修為,學(xué)習(xí)外功可學(xué)一知十,觸類旁通,內(nèi)功修為越高將來的成就越大。

            學(xué)習(xí)算法吧!

            posted @ 2011-07-20 23:59 jaysoon 閱讀(611) | 評論 (2)編輯 收藏

            2011年1月21日

            數(shù)據(jù)挖掘中的指數(shù)函數(shù)

                        最近做數(shù)據(jù)時,使用神經(jīng)網(wǎng)絡(luò)建模。在神經(jīng)網(wǎng)絡(luò)中,會用到激發(fā)函數(shù)(activation function)。

                    典型的激發(fā)函數(shù)有Sigmod函數(shù):

                              image

                    雙曲正切函數(shù):

                             image

                      這兩個都涉及到指數(shù)函數(shù),在C中,為求指數(shù)函數(shù),使用exp()函數(shù)。

                  在數(shù)次出錯后找到問題,原來是我的指數(shù)值過大,數(shù)據(jù)中有時會出現(xiàn)超過1000的數(shù)字,這導(dǎo)致在求值過程中,即使使用double型,也使得結(jié)果溢出。

                  解決方法是定義一個指數(shù)函數(shù),當(dāng)指數(shù)值超過一定界限便指定一個相對無窮大的值,這樣也符合數(shù)學(xué)定義。在我的處理中,將界限設(shè)定為15,當(dāng)該值大于15時,返回3000000;當(dāng)界限值小于-15時,返回0。

            posted @ 2011-01-21 23:40 jaysoon 閱讀(1121) | 評論 (0)編輯 收藏

            2010年4月11日

            配置本地文件共享

                在配置文件共享時,對沒有經(jīng)驗(yàn)的用戶會出現(xiàn)很多問題,這里介紹三點(diǎn)注意事項(xiàng):
                1. 首先打開菜單中“工具”->“文件夾選項(xiàng)”->“查看”,確認(rèn)“使用簡單文件共享”沒有被選上;
                2. 右鍵“我的電腦”,“管理”->“系統(tǒng)工具”->“本地用戶和組”->“用戶”,右鍵“Guest”,“屬性”,在“常規(guī)”選項(xiàng)卡中,取消“賬戶已停用”;
                3. 打開“控制面板”->“管理工具”->“本地安全策略”,打開“本地策略”->“用戶權(quán)利指派”,雙擊“拒絕從網(wǎng)絡(luò)訪問這臺計算機(jī)”,確認(rèn)其中的“guest”已刪除。

                
                 本文針對XP用戶,其它用戶可參照。

            posted @ 2010-04-11 17:08 jaysoon 閱讀(331) | 評論 (0)編輯 收藏

            2009年4月29日

            賦值運(yùn)算符和復(fù)制構(gòu)造函數(shù)

                  賦值運(yùn)算符復(fù)制構(gòu)造函數(shù)都是用已存在A的對象來創(chuàng)建另一個對象B。不同之處在于:賦值運(yùn)算符處理兩個已有對象,即賦值前B應(yīng)該是存在的;復(fù)制構(gòu)造函數(shù)是生成一個全新的對象,即調(diào)用復(fù)制構(gòu)造函數(shù)之前B不存在。   
                  CTemp a(b);      //復(fù)制構(gòu)造函數(shù),C++風(fēng)格的初始化
                  CTemp a=b;      //仍然是復(fù)制構(gòu)造函數(shù),不過這種風(fēng)格只是為了與C兼容,與上面的效果一樣
                  在這之前a不存在,或者說還未構(gòu)造好。

                  CTemp a;
                  a=b;               //賦值運(yùn)算符
                  在這之前a已經(jīng)通過默認(rèn)構(gòu)造函數(shù)構(gòu)造完成。

                  我覺得將賦值運(yùn)算符稱為“賦值構(gòu)造函數(shù)”是錯誤的,構(gòu)造函數(shù)發(fā)生在對象創(chuàng)建時期,而賦值是運(yùn)算符,發(fā)生在“運(yùn)算”時期,賦值運(yùn)算前,對象已經(jīng)構(gòu)造完成,所以不能稱之為“構(gòu)造函數(shù)”。
                  一家之言!!

            posted @ 2009-04-29 18:32 jaysoon 閱讀(1912) | 評論 (2)編輯 收藏

            C++是類層次保護(hù)的

             

            class CStack
            {
            public:
                   CStack();  
                   CStack(
            int  size); 
                   CStack(
            const CStack& st);   //復(fù)制構(gòu)造函數(shù),注意使用引用
            private:    
                   
            int _size;
                   
            int _count;
                   
            int* _s;           
            }
            ;
            CStack::CStack(
            const CStack& st)
            {
                  _size
            =st._size;
                  
            if(_size > 0)
                  
            {
                           _s 
            = new int[_size];
                           _count 
            = st._count;                  //訪問st的私有數(shù)據(jù)
                           for(int i=0; i<_count; ++i)
                                   _s[i] 
            = st._s[i];             
                  }
                     
                  
            else
                  
            {
                      _s 
            =  0;
                      _count 
            = 0;           
                  }
                                                        
            }

                  在C++模型中,保護(hù)是在類層次應(yīng)用的,而不是在對象層次。
                  這句話的意思是,類的任意一個對象可以訪問該類的另一個對象的內(nèi)部的任何東西。在上面的例子中,復(fù)制構(gòu)造函數(shù)中的賦值語句_size = st._size;訪問了st的私有數(shù)據(jù)。
                  這說明,C++中的訪問保護(hù)是按照層次的原則定義的,那么什么事對象層次的保護(hù)呢?
                  在Smalltalk中,成員函數(shù)可以當(dāng)前對象的私有數(shù)據(jù),但不能訪問任何其它對象的私有數(shù)據(jù),即使它們屬于相同的類。

            posted @ 2009-04-29 17:57 jaysoon 閱讀(299) | 評論 (0)編輯 收藏

            C++中關(guān)于構(gòu)造函數(shù)的幾個問題

            首先我們給出一個類的例子

            class CStack
            {
            public:
                   CStack();  
                   CStack(
            int  size=100); 
                   CStack(
            const CStack& st);   //復(fù)制構(gòu)造函數(shù),注意使用引用
            private:    
                   
            int _size;
                   
            int _count;
                   
            int* _s;           
            }
            ;
            CStack::CStack(
            const CStack& st)
            {
                  _size
            =st._size;
                  
            if(_size > 0)
                  
            {
                           _s 
            = new int[_size];
                           _count 
            = st._count;         
                           
            for(int i=0; i<_count; ++i)
                                   _s[i] 
            = st._s[i];             
                  }
                     
                  
            else
                  
            {
                      _s 
            =  0;
                      _count 
            = 0;           
                  }
                                                        
            }


            int main()
            {
                CStack st;
                
            return 0;    
            }



            一. 在main()中,對象st不知道該調(diào)用哪一個構(gòu)造函數(shù),因?yàn)镃Stack()和CStack(int  size=100)都滿足條件,此時正確的編譯器會立即標(biāo)示這種沖突,強(qiáng)迫實(shí)現(xiàn)者解決這個問題。

            二. 假設(shè)我們已經(jīng)有了一個CStack對象s1
            CSatck s2=s1;      //這個句子將會調(diào)用復(fù)制構(gòu)造函數(shù)
            CStack s3 = CStack(200);   //這個句子將會做什么呢?

            首先,產(chǎn)生一個臨時CStack對象,不妨命名為sss,并調(diào)用構(gòu)造函數(shù)CStack::CStack(200),隨后執(zhí)行復(fù)制構(gòu)造函數(shù)。也就是說,它相當(dāng)于

            CStack sss(200);
            CStack s3(sss);

            這很浪費(fèi)時間,不過,大多數(shù)編譯器還是能優(yōu)化這種語句。但是我們?yōu)槭裁床火B(yǎng)成一個好的習(xí)慣,直接寫成
            CStack s3(200)呢?

            posted @ 2009-04-29 17:45 jaysoon 閱讀(409) | 評論 (0)編輯 收藏

            僅列出標(biāo)題  
            <2025年7月>
            293012345
            6789101112
            13141516171819
            20212223242526
            272829303112
            3456789

            導(dǎo)航

            統(tǒng)計

            常用鏈接

            留言簿

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            收藏夾

            C++

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            97r久久精品国产99国产精| 亚洲AV日韩精品久久久久久| 久久久久久久尹人综合网亚洲| 国产精品成人99久久久久 | 久久国产欧美日韩精品| 97精品伊人久久久大香线蕉| 久久伊人中文无码| 亚洲国产精品久久电影欧美| 久久久中文字幕日本| 亚洲国产精品无码久久青草| 狠狠狠色丁香婷婷综合久久五月 | 色婷婷综合久久久久中文字幕| 久久久黄色大片| 久久久国产乱子伦精品作者| 久久高清一级毛片| 久久精品免费一区二区| 国产精品毛片久久久久久久| 91久久精品国产91性色也| 久久精品综合网| 97精品国产91久久久久久| 乱亲女H秽乱长久久久| 久久国产成人| 99久久综合国产精品免费| 久久青青草原国产精品免费 | 亚洲乱码精品久久久久..| 99精品国产在热久久| 久久青青色综合| 国产精品99久久久久久宅男| 精品久久无码中文字幕| 伊人久久精品无码av一区| 久久毛片免费看一区二区三区| 久久精品成人免费看| 国产亚洲综合久久系列| 亚洲国产精品久久电影欧美| 国产精品一区二区久久精品涩爱 | 久久se精品一区精品二区国产| 人妻丰满AV无码久久不卡| 无码人妻久久久一区二区三区| 香蕉久久AⅤ一区二区三区| 久久国产成人午夜aⅴ影院 | 无码人妻精品一区二区三区久久|