C和C ++有什麼區別?


C ++是帶有類的C。程序員


早在C流行而且沒有C ++的時候,Bjarne Stroustrup就選擇了C,並使用來自Simula67語言的類對其進行了擴充,並建立了C ++。這些類爲面向對象範例打開了一個全新的世界。算法


最初,沒有專用的C ++編譯器。當您編寫C ++時,編譯器將其轉換爲C(人類很難理解的C,可是C仍然能夠),而後編譯C。可是,C ++編譯器確實出現了,新功能也出現了。微信


C和C ++之間的一些區別是:數據結構

在C語言中,對於輸入或輸出,咱們使用諸如gets(),puts(),scanf(),printf()等函數。這些函數指望值具備特定的數據類型,或者對於scanf()或printf(),咱們必須指定咱們要函數處理的數據類型。在C ++中,咱們有時可使用這些功能。可是,人們一般更喜歡使用cin和cout對象。請注意,這些是類的對象,當咱們執行I / O時,它們自己將肯定變量的數據類型。函數

C不支持函數重載。您不能具備相同名稱的多個功能。所以,假設您有一個計算整數的平方的函數和計算浮點數的平方的函數,則必須給它們分別命名。在C ++中,給它們起相同的名稱,而後語言將根據傳遞給該函數的參數類型來肯定使用哪一個函數。編碼

C不支持異常處理。您應該避免因爲意外事件轉折而致使運行時錯誤的狀況。在C ++中,您能夠引起異常並相應地處理它們。在進行大型項目時,這很是有用。.net

除了函數重載以外,C ++還支持C中不存在的運算符重載。是否曾經想過用+運算符鏈接兩個字符串?好吧,儘管C運氣很差,可是使用C ++能夠作到。固然,類使這一切成爲可能,而且您必須使用std :: string而不是常規字符串,可是,爲了保持理智,std :: string要好得多。對象

上一點將咱們引到了std :: string。這是一個用於字符串的(驚奇類)類。比C風格的字符串更易於使用和閱讀。繼承

對於動態內存分配,C使用malloc()和free(),可是C ++具備更好的new和delete運算符。事件

命名空間變得愈來愈流行,尤爲是在應用程序開發中,而且C ++確實支持C語言中缺乏的命名空間。

C的一個使人討厭的功能是您須要在它們的做用域的開始即全部的變量或函數的左括號以後聲明全部變量。在C ++中,在任何位置定義一個變量,最好是最靠近使用它的地方。

在C中,全局變量能夠具備多個聲明。C ++更爲嚴格,不容許這樣作。

畢竟,C ++是面向對象的。諸如抽象,繼承,多態之類的事情沒法在C中完成。它爲您帶來了全新的範例。若是喜歡,請使用它。若是沒有,您能夠不用它(可是C ++的許多功能都是圍繞類構建的)。

是否曾經想過建立僅在處理的數據類型上有所不一樣的相似功能?您能夠經過函數重載來作到這一點,但這一般用於名稱相同但行爲不一樣的函數。若是您想作徹底同樣的事情但針對不一樣的數據類型該怎麼辦?爲此編寫多個函數沒有多大意義。並且,函數重載不支持僅返回類型不一樣的函數。模板就在這裏。您能夠建立泛型函數和類,並將其與任何數據類型一塊兒使用。C ++有,C沒有。

C ++具備STL,這是一個很是有用的模板化類列表(所以,您能夠將它們用於各類數據類型)。您已經準備好算法,數據結構,迭代器等。也許每一個C ++程序員都會誇讚C編碼器。

本文分享自微信公衆號 - 黑客祕房(hackers0101)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索