C#學習系列(一)——C#和C++的區別


C#和C++的區別在於:C#代碼首先會被編譯為CLR(公共語言運行庫),然后由.NET框架解析;它是在虛擬機上執行,會自動進行內存管理,不支持使用指針。C++將會直接被編譯為機器代碼,允許使用指針,需要手動組織管理內存。

C#和C ++的區別

1、編譯區別

C#代碼首先會被編譯為CLR(公共語言運行庫),然后由.NET框架解析。

C ++代碼將會直接被編譯為機器代碼。

2、內存管理的不同

C#是在虛擬機上執行,會自動進行內存管理。而,C ++需要手動組織管理內存。

3、指針使用的區別

C#不支持使用指針,但可以使用一些不安全的類和方法;而,C ++允許使用指針。

4、系統環境(平台)的區別

C#主要用於Windows環境;而,C ++是為基於Unix的系統設計的,但現在可以用於任何平台。

5、應用上的區別

C#的應用涉及基於Web的桌面和移動應用程序;而,C ++的唯一目的就是創建獨立的控制台應用程序。

6、速度上的區別

C ++代碼更快,因為它不使用重型庫;而,C#較慢,因為它會產生開銷並使用了類似於java這樣的重型庫。

C與C++的區別

1. C 語言是面向過程的,而 C++ 是面向對象的。 
2,C 語言有標准的函數庫,它們松散的,只是把功能相同的函數放在一個頭文件中;而 C++ 對於大多數的函數都是有集成的很緊密,特別是 C 語言中沒有的 C++ 中的 API 是對 Window 系統的大多數 API 有機的組合,是一個集體。但你也可能單獨調用 API。 
3,特別是 C++ 中的圖形處理,它和語言的圖形有很大的區別。C 語言中的圖形處理函數基本上是不能用在中 C++ 中的。C 語言標准中不包括圖形處理。 
4,C 和 C++ 中結構體:C的結構體內不允許有函數,而C++的結構體內部允許有成員函數(允許有構造函數、析構函數和this指針),且允許這個函數是虛函數;C的結構體對內部成員變量的訪問權限只能是public,而C++允許public,private,protected三種;C的結構體是不可以繼承的,C++的結構體是允許從其他結構體或者類繼承的;

4,C 語言可以寫很多方面的程序,但是 C++ 可以寫得更多更好,寫 DLL,寫控件,寫系統。 
5,C 語言對程序的文件的組織是松散的,幾乎是全要程序處理;而 C++ 對文件的組織是以工程,各文件分類明確。 
6,C++ 中的 IDE 很智能,和 VB 一樣,有的功能可能比VB還強。 
7,C++ 對可以自動生成你想要的程序結構使你可以省了很多時間。有很多可用的工具如加入 MFC 中的類的時候,加入變量的時候等等。 
8,C++ 中的附加工具也有很多,可以進行系統的分析,可以查看 API;可以查看控件。 
9,調試功能強大,並且方法多樣。 

 

C# 語言與 C++ 的區別: 

1.C# 與 C++ 比較的話,最重要的特性就是 C# 是一種完全面向對象的語言,而 C++ 是既面向過程又面向對象的語言,另外 C# 是基於 IL 中間語言和 .NET Framework CLR 的,在可移植性,可維護性 和強壯性都比 C++ 有很大的改進 

  ([1]C++是C語言的繼承,它既可以進行C語言的過程化程序設計,又可以進行以抽象數據類型為特點的基於對象的程序設計,還可以進行以繼承和多態為特點的面向對象的程序設計。

    [2]面向對象主要是說,在系統設計和實現上用的思想,面向對象的思想的運用,就是先從系統需求中確定類,然后按類實例化對象,對象之間的通信就實現了系統的功能。

    [3]面向過程,即系統的實現是分過很多按流程或工序設計的不同功能(函數)來實現,就是先干什么,后干什么,主要是靠函數的調用,因為面向過程沒有對象,所以這些函數不屬於任何對象,沒有封裝、繼承等的靈活運用,系統一旦龐大,其設計和實現的復雜性和可控性跟面向對象不是一個數量級的。)

2.C#不支持多重繼承,這是與C++明顯區別的地方.

3.在標准的C#安全代碼中不支持指針類型的操作,然而,你卻能在微軟所謂的“非安全代碼”中操作指針類型對象。 

4.C#中所有對象都只能通過關鍵詞“new”來創建,C++的“類名_對象名”方式在C#中變為聲明一個引用。呵呵,萬物皆對象,連常見的數據類型都變為對象了,JAVA味道很濃。

5.在C#里面,數組的元素都是存放在托管堆里面,比起C++的在內存里不確定位置申請一塊連續空間要安全得多。

6,C++的switch后跟參數必須是int型,而C#卻允許string型,這點改進覺得真的是比以前方便多了!

7.C#會禁止所有switch..case語句的失敗情形,除非case語句后是空格,否則執行了前一個case語句就算沒有break也會停止執行后面的case語句。

8.在異常處理上,C++允許拋出任何類型,而C#中規定拋出類型為一個派生於System.Exception的對象。

9.C++的宏在C#中被拋棄了很多,而且也不建議使用,因此很少見。

10.C++的模板在C#里沒有了,但在C#中我們找到了能完成模板任務的更鋒利的武器:委托。

11.C++的全局變量這一概念沒有了,C#和JAVA類似,要把所有東西都放在類里面,還建議使用命名空間包含起來。

12.C#可以在定義類的時候直接給屬性賦值,而C++這么做卻會編譯出錯。

13.C#里有靜態構造函數一個概念,這個構造函數只執行一次,因此能夠保證一些靜態成員只被初始化一遍。

14.C#有自動垃圾收集機制,防止內存泄露,把C++程序員從繁重的內存管理上解放出來。

15.更強的類型轉換保護機制,比如說把float轉成uint,直接轉換0.35會變成0.34,是因為二進制無法表示這樣的數字,使用System.Conver里的方法,可以安全地把類型安全轉換過來。

16.委托與事件、裝箱與取消裝箱、Web Services……一大堆C++沒有的新東西,我感覺是做大型項目方便了管理,也容易擴充,但做起小型項目,由於是編譯成IL代碼的,運行需要.NET Framework SDK支持,效率是個問題,不利於做那些對運算速度和內存消耗要求高的項目。 

17.C# 的設計目標是用來開發快速穩定可擴展的應用程序,當然也可以通過 Interop 和 Pinvoke 完成一些底層操作,但是對於一些和底層系統相關很緊密的程序(譬如說驅動程序),還是建議用 C++ 來寫 
18.C++ 不允許在一個構造函數中調用另外一個構造函數(稱為委派構造函數調用),而 C# 則允許。委派構造函數調用語法上非常自然和易懂,事實上, C++ 不提供這一特性並不是出於語法上的考慮,而是出於資源管理的考慮(這樣的事情對 C++ 來說還有很多很多)。 
C++ 的構造函數用於分配資源,而析構函數用於釋放資源,構造函數和析構函數調用必須匹配,否則就打破了 C++ 的基本規則。如果允許委派構造函數調用,則顯然會打破這一規則——構造函數被執行兩次,而析構函數只執行一次。當然,對一些類,例如前面的那個 Point 來說這不是個問題,但是從語言機制的角度講這個特性可能屬於“危險”的特性。注:在最新的 C++ 標准提議草案中,Herb 等人有一個關於允許委派構造函數調用的提案,當然這很大程度上是為了方便 C++ /CLI 綁定。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM