<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jasmine214--love

    只有當(dāng)你的內(nèi)心總是充滿快樂、美好的愿望和寧靜時(shí),你才能擁有強(qiáng)壯的體魄和明朗、快樂或者寧靜的面容。
    posts - 731, comments - 60, trackbacks - 0, articles - 0

    從JAVA到C++的區(qū)別

    Posted on 2010-07-30 12:57 幻海藍(lán)夢 閱讀(262) 評論(0)  編輯  收藏 所屬分類: C++

    原文:http://m.tkk7.com/RiKeR/articles/139269.html

    一個(gè)完整的C++程序包括頭文件(.h)和文本文件(.cpp).當(dāng) 然兩者都不是必須存在的.只要有其中之一就可以.

    1.C++
    使用#include預(yù) 處理器指示符來將頭文件引入而成為我們程序的一部分.它將讀入指定文件的內(nèi)容,有兩種格式
    #include <some_file.h>
    #include "my_file.h"
    我們可以把用"<"">"引 入的頭文件理解成是一個(gè)工程或者標(biāo)準(zhǔn)頭文件(系統(tǒng)提供的).查找過程會(huì)檢查預(yù)定義的目錄.
    而 用引號(hào)括起來則表明該文件是用戶提供的頭文件.查找將從當(dāng)前文件目錄開始.
    這個(gè)include我 覺得類似于JAVAimport

    2.
    注 釋方法一樣

    3.
    類文件的定義.嚴(yán)格來說并沒有類文件的說法.我 是為了和普通的cpp文件區(qū)分開來才這么說的.C++中類 的聲明寫在頭文件中
    聲明一個(gè)類:

    class test{
    public:void test1();
    private:void test2();
    };



    注意這里的寫法.最后那個(gè)大括號(hào)后 面必須要跟一個(gè)分號(hào)的.JAVA則不用.我一開始及其不適應(yīng).
    然 后在cpp文件中來定義

    void test::test1(){
    cout << "aaa";
    }
    void test::test2(){
    cout << "bb";
    }


    注意:這里大括號(hào)后面有沒有帶分號(hào)都沒關(guān)系.

    4.C++
    中 對函數(shù)的調(diào)用方法也靈活.

    test t;
    t.test2();
    ----------------
    test* t = new test();
    t->test2();


    其實(shí)我還是喜歡test t = new test();t.test2()

    5.
    編譯器的解析.如果沒有引入頭文件的話你必須把main()函 數(shù)放到文件的最下面.

    void main(){
    test();
    }
    void test(){
    cout << "aa";
    }



    這樣寫編譯器會(huì)報(bào)找不到test()方 法的.這個(gè)是C遺留下的問題.解決方法就是引入頭文件,或 者把main寫到最后.或者在main前面聲明一下:

    void test();
    void main(){
    test();
    }
    void test(){
    cout << "aa";
    }


    這種做法就和引入頭文件差不多了.

    6.
    析 構(gòu)函數(shù).這個(gè)特性很有用,在類消失的最后一刻自動(dòng)調(diào)用這個(gè)種類型的函數(shù)來做一些清除操作

    7.
    爭 議比較大的聲明指針類型.
    int* pt=0;
    int *pt=0;
    這個(gè)星號(hào)是緊跟著類型呢還是緊跟 著變量名呢.由于C++的靈活度太高.這兩種寫法都沒錯(cuò)誤.但 按理來說緊跟著類型應(yīng)該會(huì)好一些.因?yàn)槲覀兪窃诼暶饕粋€(gè)指針類型的變量.但如果按下面的寫法:
    int* pt,pt1;
    你說pt1是指針類型嗎,答案是不是.遇 到這種情況就要把*號(hào)緊跟著變量名了
    int *pt,*pt1;

    耐心點(diǎn),接 下來的是精華

    ?

    main 函 數(shù)
    C++
    //
    自 由浮動(dòng) 的函數(shù)
    int main( int argc, char* argv[])
    {
    ??? printf( "Hello, world" );
    }
    Java
    //
    每個(gè) 函數(shù)(方法)都必須是一個(gè)類的一部分;當(dāng)java <class>運(yùn)行是一個(gè)特定類的主函數(shù)會(huì)被調(diào)用
    // (
    因此你可以讓每個(gè)類都有一個(gè)main函 數(shù),這在寫單元測試是很有用)
    class HelloWorld
    {
    ??? public static void main(String args[])
    ??? {
    ??????? System.out.println( "Hello, World" );
    ??? }
    }

    ?

    類的聲明
    除 了 Java 不要求用分號(hào)外幾乎是相同的。
    C++
    ??? class Bar {};
    ???
    Java
    ??? class Bar {}
    ???

    方法聲明
    ??
    都 相同的, 除了在Java,方法必須總是某個(gè)類的一部分并且可能public/private/protected 作為修飾


    構(gòu)造函數(shù)和析構(gòu)函數(shù)
    構(gòu) 造函數(shù)都是相同的 (即類的名字), Java沒有準(zhǔn)確意義上的的析構(gòu)函數(shù)

    靜態(tài)成員函數(shù)和變量
    方 法聲明是相同的, Java 提供靜態(tài)初始化塊來來初始化靜態(tài)變量 (不 需要在源文件中聲明):
    class Foo
    {
    ??? static private int x;
    ??? //
    靜態(tài)初始化塊
    ??? { x = 5; }
    }

    對象的聲明
    C++
    ??? //
    在棧中
    ??? myClass x;

    ?
    ??? //
    或者在堆中
    ??? myClass *x = new myClass;

    ???
    Java
    ???//
    總 是在對堆中聲明
    ??? myClass x = new myClass();
    ???

    ?

    ??
    C++
    ??? class Foo : public Bar
    ??? { ... };
    ???
    Java
    ??? class Foo extends Bar
    ??? { ... }
    ???

    訪問級別 (abstraction barriers)
    C++

    ???public:
    ??????? void foo();
    ??????? void bar();

    ???
    Java
    ??? public void foo();
    ??? public void bar();
    ???

    虛函數(shù)
    C++
    ??? virtual int foo(); //
    或者非虛函數(shù)寫作 int foo();
    ???
    Java
    ??? //
    函數(shù)默認(rèn)的就是虛函數(shù); final關(guān)鍵字防止重載
    ??? int foo(); //
    或者, final int foo();

    ?

    內(nèi)存管理
    大 體上是相同的--new 來分配, 但是 Java沒有 delete, 因?yàn)樗欣厥掌鳌?span>

    NULL vs null
    C++
    ??? //
    初始化一個(gè)指針為 NULL
    ??? int *x = NULL;
    ???
    Java
    ???//
    編譯器將捕獲使用未初始化的引用
    ?? //
    但是如果你因需要初始化一個(gè)引用而賦一個(gè)null,那么這是無效的
    ??? myClass x = null;
    ???

    布爾型
    Java
    有 一點(diǎn)羅嗦: 你必須寫 boolean而不止是 bool.
    C++
    ?? bool foo;
    Java

    ???? boolean foo;

    ??
    C++
    ??? const int x = 7;
    ???
    Java
    ??? final int x = 7;
    ???

    拋異常
    首 先,Java在編譯器強(qiáng)制拋異常如果你的方法可能會(huì)拋異常你必需明確報(bào)告
    C++
    ???? int foo() throw (IOException)
    Java
    ???? int foo() throws IOException

    數(shù)????
    C++
    ??? int x[10];
    ??? //

    ??? int *x = new x[10];
    ??? //
    使用 x,然后歸還內(nèi)存
    ??? delete[] x;
    ???
    Java
    ??? int[] x = new int[10];
    ??? //
    使用 x, 內(nèi)存有垃圾回收器回收或
    ??? //
    或 在程序生命周期盡頭歸還給系統(tǒng)
    ???

    集合和迭代器
    C++

    迭 代器是類的成員。范圍的開始是<容器>.begin(), 結(jié)束是 <容器>.end()。 用++ 操作符遞增,? *操作符訪。?
    ??? vector myVec;
    ??? for ( vector<int>::iterator itr = myVec.begin();
    ????????? itr != myVec.end();
    ????????? ++itr )
    ??? {
    ??????? cout << *itr;
    ??? }

    ???
    Java
    迭代器只是一個(gè) 接口。 范圍的開始是 <集合>.iterator,你必須用itr.hasNext()來 查看是否到達(dá)集合尾。 使用itr.next()(是在C++中使用操作符++ *操 作的結(jié)合)來獲得下一個(gè)元素。?
    ??? ArrayList myArrayList = new ArrayList();
    ??? Iterator itr = myArrayList.iterator();
    ??? while ( itr.hasNext() )
    ??? {
    ??????? System.out.println( itr.next() );
    ??? }
    ?
    ??? //
    , Java 5
    ??? ArrayList myArrayList = new ArrayList();
    ??? for( Object o : myArrayList ) {
    ??????? System.out.println( o );
    ??? }
    ????
    ?

    ???
    抽象類
    C++
    ??? //
    只需要包含一個(gè)純虛函數(shù)
    ??? class Bar { public: virtual void foo() = 0; };
    ???
    Java
    ??? //
    語法上 允許顯示的聲明!
    ??? abstract class Bar { public abstract void foo(); }
    ?
    ??? //
    或者你也可以聲明一個(gè)接口
    ??? interface Bar { public void foo(); }
    ?
    ??? //
    然后讓一個(gè)類繼承這個(gè)接口:
    ??? class Chocolate implements Bar
    ??? {
    ??????? public void foo() { /* do something */ }
    ??? }
    ???
    引 用 vs? 指針
    C++
    ??? //
    引 用不可改變,通過使用指針來獲得更多的靈活性
    ??? int bar = 7, qux = 6;
    ??? int& foo = bar;
    ???
    Java
    ??? //
    引 用是可變的,僅存儲(chǔ)對象地址;
    ??? //
    沒有指針類型
    ??? myClass x;
    ??? x.foo(); // error, x is a null “pointer”
    ?
    ??? //
    注意你要總是用 . 來訪問域
    ???
    編?譯
    C++
    ??? //
    編譯
    ??? g++ foo.cc -o outfile
    ??? //
    運(yùn) 行
    ??? ./outfile
    ???
    Java
    ???//
    編譯foo.java文件中的類成<classname>.class??? javac foo.java
    ??? //
    通過調(diào)用<classname>中的靜態(tài)main方 法來運(yùn)行
    ??? java <classname>
    ???
    ??
    兩種語言是一樣的 (// /* */ 可以用)

    主站蜘蛛池模板: 亚洲一本综合久久| 91精品导航在线网址免费| 91亚洲国产成人久久精品网址 | 亚洲国产美女精品久久久久∴| 青娱乐免费在线视频| 三年片免费观看大全国语| 亚洲成a人无码亚洲成www牛牛| 日产亚洲一区二区三区| 永久亚洲成a人片777777| 日本午夜免费福利视频| 国产曰批免费视频播放免费s | 亚洲av无码精品网站| 亚洲国产婷婷香蕉久久久久久| 99久久这里只精品国产免费| 日韩免费视频一区二区| AAAAA级少妇高潮大片免费看| 国产偷国产偷亚洲高清人| 亚洲精品自偷自拍无码| 亚洲综合激情五月色一区| 亚洲六月丁香六月婷婷蜜芽| 亚洲国产高清人在线| 久久久久亚洲精品美女| 国产亚洲无线码一区二区| 国产成人亚洲精品91专区手机| 四虎永久在线精品免费影视| 日韩免费无码一区二区视频| 成年女人色毛片免费看| 在线观看免费毛片| 免费观看男人免费桶女人视频 | 亚洲欧洲日本在线观看 | 老司机在线免费视频| 久久精品国产免费观看三人同眠| 免费国产午夜高清在线视频| a级成人毛片免费图片| 免费无码一区二区三区蜜桃| a级毛片毛片免费观看久潮| 99精品全国免费观看视频..| a级毛片免费在线观看| 色猫咪免费人成网站在线观看| 一级做a爰全过程免费视频| 免费看男女下面日出水来|