电竞比分网-中国电竞赛事及体育赛事平台

分享

java與c 、c++、c#的關(guān)系

 何必清楚 2012-02-28

下表包含 C++ C# 功能之間的重要比較。如果您是一位 C++ 程序員,此表將為您提供這兩種語言的最重要差異。

注意   C++ C# 項(xiàng)目派生于不同的項(xiàng)目模型。有關(guān) C++ C# 項(xiàng)目之間差異的信息,請參見項(xiàng)目中的項(xiàng)管理和使用解決方案資源管理器。
功能 參考主題
繼承:類只能繼承一個(gè)基類中的實(shí)現(xiàn)。另外,類或接口可以實(shí)現(xiàn)多個(gè)接口。

 
數(shù)組:聲明 C# 數(shù)組和聲明 C++ 數(shù)組的語法不同。在 C# 中,“[]”標(biāo)記出現(xiàn)在數(shù)組類型的后面。
bool
類型:bool 類型和其他類型(特別是 int)之間沒有轉(zhuǎn)換。

long
類型:在 C# 中,long 數(shù)據(jù)類型為 64 位,而在 C++ 中為 32 位。
struct
類型:在 C# 中,類和結(jié)構(gòu)在語義上不同。struct 是值類型,而 class 是引用類型。

 
switch
語句:與 C++ 中的 switch 語句不同,C# 不支持從一個(gè) case 標(biāo)簽貫穿到另一個(gè) case 標(biāo)簽。
delegate
類型:委托與 C++ 中的函數(shù)指針基本相似,但前者具有類型安全,是安全的。
從派生類調(diào)用重寫基類成員。
 
使用 new 修飾符顯式隱藏繼承成員。
聲明重寫方法需要有 override 關(guān)鍵字。
預(yù)處理器指令用于條件編譯。C# 中不使用頭文件。
異常處理:使用 finally 語句。

 
C#
運(yùn)算符:C# 支持其他運(yùn)算符,如 is typeof。它還引入了某些邏輯運(yùn)算符的不同功能。
 
關(guān)鍵字 extern 的使用。
關(guān)鍵字 static 的使用。
在構(gòu)造基類上替代 C++ 初始化列表的方法。

C#
程序的常規(guī)結(jié)構(gòu):命名空間、類、結(jié)構(gòu)、委托和枚舉。
Main
方法和 C++ 中的 main 函數(shù)的聲明方式不同。
方法參數(shù):C# 支持 ref out 參數(shù),這兩個(gè)參數(shù)取代指針通過引用傳遞參數(shù)。
 
C# 中只在不安全模式下才使用指針。 unsafe
C# 中以不同的方式執(zhí)行重載運(yùn)算符。

字符串:C# 字符串不同于 C++ 字符串。
string
foreach
關(guān)鍵字使您得以循環(huán)訪問數(shù)組和集合。
foreach, in
C#
中沒有全局方法和全局變量:方法和變量必須包含在類型聲明(如 class struct)中。

C#
中沒有頭文件和 #include 指令:using 指令用于引用其他未完全限定類型名的命名空間中的類型。

C#
中的局部變量在初始化前不能使用。

析構(gòu)函數(shù):在 C# 中,不能控制析構(gòu)函數(shù)的調(diào)用時(shí)間,原因是析構(gòu)函數(shù)由垃圾回收器自動(dòng)調(diào)用。

構(gòu)造函數(shù):與 C++ 類似,如果在 C# 中沒有提供類構(gòu)造函數(shù),則為您自動(dòng)生成默認(rèn)構(gòu)造函數(shù)。該默認(rèn)構(gòu)造函數(shù)將所有字段初始化為它們的默認(rèn)值。
 
C#
不支持位域。 C++ 位域

C#
的輸入/輸出服務(wù)和格式設(shè)置依賴于 .NET Framework 的運(yùn)行時(shí)庫。

 
C# 中,方法參數(shù)不能有默認(rèn)值。如果要獲得同樣的效果,請使用方法重載。

 

 

 

1.繼承:C++支持多繼承,C#類只能繼承一個(gè)基類中的實(shí)現(xiàn)但可以實(shí)現(xiàn)多個(gè)接口。
2.
數(shù)組:聲明 C# 數(shù)組和聲明 C++ 數(shù)組的語法不同。在 C# 中,“[]”標(biāo)記出現(xiàn)在數(shù)組類型的后面。
3.
數(shù)據(jù)類型:在C++bool類可以與整型轉(zhuǎn)換,但C#bool 類型和其他類型(特別是 int)之間沒有轉(zhuǎn)換。long 類型:在 C# 中,long 數(shù)據(jù)類型為 64 位,而在 C++ 中為 32 位。
4.struct
類型:在 C# 中,類和結(jié)構(gòu)在語義上不同。struct 是值類型,而 class 是引用類型。
5.switch
語句:與 C++ 中的 switch 語句不同,C# 不支持從一個(gè) case 標(biāo)簽貫穿到另一個(gè) case 標(biāo)簽。 
6.delegate
類型:委托與 C++ 中的函數(shù)指針基本相似,但前者具有類型安全,是安全的。
7.
從派生類調(diào)用重寫基類成員。 base
8.
使用 new 修飾符顯式隱藏繼承成員。
9.
重寫方法需要父類方法中用virtual聲名,子類方法用override 關(guān)鍵字。
10.
預(yù)處理器指令用于條件編譯。C# 中不使用頭文件。 C# 預(yù)處理器指令
11.
異常處理:C#中引入了 finally 語句,這是C++沒有的。
12.C#
運(yùn)算符:C# 支持其他運(yùn)算符,如 is typeof。它還引入了某些邏輯運(yùn)算符的不同功能。
13. static
的使用,static方法只能由類名調(diào)用,改變static變量。
14.
在構(gòu)造基類上替代 C++ 初始化列表的方法。
15.Main
方法和 C++ Java中的 main 函數(shù)的聲明方式不同,Main而不能用main
16.
方法參數(shù):C# 支持 ref out 參數(shù),這兩個(gè)參數(shù)取代指針通過引用傳遞參數(shù)。 
17.
C# 中只能在unsafe不安全模式下才使用指針。
18.
C# 中以不同的方式執(zhí)行重載運(yùn)算符。
19.
字符串:C# 字符串不同于 C++ 字符串。
20.foreach:C#
VB中引入了foreach關(guān)鍵字使得以循環(huán)訪問數(shù)組和集合。
21.C#
中沒有全局方法和全局變量:方法和變量必須包含在類型聲明(如 class struct)中。
22.C#
中沒有頭文件和 #include 指令:using 指令用于引用其他未完全限定類型名的命名空間中的類型。
23.C#
中的局部變量在初始化前不能使用。
24
析構(gòu)函數(shù):在 C# 中,不能控制析構(gòu)函數(shù)的調(diào)用時(shí)間,原因是析構(gòu)函數(shù)由垃圾回收器自動(dòng)調(diào)用。 析構(gòu)函數(shù)
25
構(gòu)造函數(shù):與 C++ 類似,如果在 C# 中沒有提供類構(gòu)造函數(shù),則為您自動(dòng)生成默認(rèn)構(gòu)造函數(shù)。該默認(rèn)構(gòu)造函數(shù)將所有字段初始化為它們的默認(rèn)值。
26.
C# 中,方法參數(shù)不能有默認(rèn)值。如果要獲得同樣的效果,需使用方法重載。

 

 

 

C++、JavaC#的語法比較


 

染色體 1:純對象導(dǎo)向語言
C#
Java 都是純對象導(dǎo)向語言,C++ 非純對象導(dǎo)向語言。

染色體 2:強(qiáng)制型態(tài)檢查
C#
Java 都強(qiáng)制進(jìn)行型態(tài)檢查,C++ 則較寬松。

染色體 3:宏
C#
Java 都不支持宏,C++ 支持宏。

染色體 4Template
C#
Java 都不支持 template,C++ 支持 template。

染色體 5:多重繼承
C#
Java 都不支持多重繼承,且都支持 interface,C++ 支持多重繼承。

染色體 6:指針
C#
Java 都不支持指針,C++ 支持指針。(不過,C# 允許在 unsafe code 內(nèi)使用指針)

染色體 7:內(nèi)存管理
C#
Java 都支持垃圾收集。C++ 不支持垃圾收集。

染色體 8:虛擬機(jī)器
C#
Java 都需要虛擬機(jī)器,C++ 不需要虛擬機(jī)器。Java 的執(zhí)行檔是中間碼,叫做 bytecode,透過 Java Runtime Environment(即 JRE)來執(zhí)行;C# 的執(zhí)行檔也是中間碼,叫做 managed code,透過 NGWS Runtime 來執(zhí)行。除了 Java,你也可以用其它程序語言(例如 Ada、Python)來作出 bytecode。除了 C#,你也可以用其它程序語言(例如 Visual BasicC++)來作出 managed code。

染色體 9Namespace
C#
Java 都支持階層式的 namespace,但 C++ 只支持單層的 namespaceJava namespace 稱為 package,C# namespace 就稱為 namespace。Java C# 都使用「.」當(dāng)作 namespace 的符號(hào),而 C++ 使用「::」。

染色體 10Platform-Independent Type
C#
Java 都使用 Platform-Independent TypeC++ type 會(huì)受到平臺(tái)的影響。

染色體 11:使用 Wrapper 包裝基本型態(tài)
C#
Java 都支持將基本型態(tài)包裝成對象,在 Java 叫做 wrapper,在 C# 則是叫做 box。

染色體 12boolean != integer
C#
Java 都不允許把整數(shù)當(dāng)布爾值用,C++ 則允許。

染色體 13access modifier
C#
Java 都支持四種等級的 access modifier,包括 public、protected、private、default/internal;C++ 只支持 public、protectedprivate。Java default(不寫)指的就是只針對同一個(gè) package 開放,正好就是 C# internal。

染色體 14:變量初始化
C#
Java 都規(guī)定不可使用未初始化的變量,C++ 則完全沒有這方面的限制。Java C# 的編譯器都會(huì)主動(dòng)幫未初始化的 field/data member 設(shè)定初始值,C++ 則不然。

染色體 15:轉(zhuǎn)型
C#
Java 都規(guī)定基本型態(tài)和 reference 型態(tài)不能互轉(zhuǎn)。

染色體 16:數(shù)組邊界檢查
C#
Java 都會(huì)主動(dòng)進(jìn)行數(shù)組邊界檢查,C++ 則不然

染色體 17:呼叫 Native Code
C#
Java 都支持呼叫 native code。Java 透過 JNIJava Native Interface);C# 透過 PInvokePlatform Invocation Service

染色體 18Metadata
C#
Java 的中間碼都包含有類別的 metadata,而 C 語言則是獨(dú)立在 header file。

染色體 19:中間碼指令
C#
IL 中間碼指令和 Java bytecode 指令非常類似,有的甚至一樣。

染色體 20:例外處理
C#
Java 都支持 try/catch/finally,但 C++ 只支持 try/catch。

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多