C 經典面試題 C和C 的區別是什麼?

2021-09-18 06:11:12 字數 1856 閱讀 8493

大家求職簡歷上肯定會寫精通c和c++語言之類的詞語,所以,這個問題被問到的概率也是相當高的,請大家提前準備下該怎麼表達!

面試中如果要和面試官談c和c++的區別這樣的問題,那麼盡量先從輪廓上談一些他們大方向上的差別,然後等著面試官再和你仔細的詢問某個知識點的細節,切忌一上來就喋喋不休,沒個邏輯,想到**說到**,這樣不行,因為它們之間的區別點還是非常多的!

針對這個問題,你可以先思考一下,然後給出諸如下面的內容:

c是面向過程的語言,而c++是物件導向的語言,因此c++語言中有類和物件以及繼承多型這樣的oop語言必備的內容,此外c++支援模板,運算子過載,異常處理機制,以及乙個非常強大的c++標準模板庫stl,另外乙個boost庫現在也歸屬c++標準庫,提供了很多強大的功能。

c只能寫面向過程的**,而c++既可以寫面向過程的**,也可以實現物件導向的**;既然c++是物件導向的oop語言,因此它還有非常強大的設計模式,比如單例,工廠,觀察者模式等等,這些在c語言當中都是不支援的。

c和c++乙個典型的區別就在動態記憶體管理上了,c語言通過malloc和free來進行堆記憶體的分配和釋放,而c++是通過new和delete來管理堆記憶體的(至於new/malloc有什麼區別,delete/free有什麼區別,你等面試官來繼續深入問你,先從大方向上羅列區別,讓他感受一下你只是的全面性^^)

另外強制型別轉換上也不一樣,c的強制型別轉換使用()小括號裡面加型別進行型別強轉的,而c++有四種自己的型別強轉方式,分別是const_cast,static_cast,reinterpret_cast和dynamic_cast(一樣,等面試官來深入問你,前提是這塊你準備好了,如果沒有理解他們的使用場景和區別,那麼這一點你還是不要說了!)

c和c++的輸入輸出方式也不一樣,printf/scanf,和c++的cout/cin的對別,前面一組是c的庫函式,後面是ostream和istream型別的物件。

c++還支援帶有預設值的函式,函式的過載,inline內聯函式,這些c語言都不支援,當然還有const這個關鍵字,c和c++也是有區別的,但是這都是目前最常用的c89標準的c內容,在c99標準裡面,c語言借鑑了c++的const和inline關鍵字,這兩方面就和c++一樣了。

由於c++多了乙個類,因此和c語言的作用域比起來,就多了乙個類作用域,此外,c++還支援namespace名字空間,可以讓使用者自己定義新的名字空間作用域出來,避免全域性的名字衝突問題。

c++不僅支援指標,還支援更安全的引用,不過在彙編**上,指標和引用的操作是一樣的

由於c++是物件導向的語言,支援類物件,類和類之間的**,組合,繼承,多型等等物件導向的設計,有很多的設計模式可以直接使用,因此在設計大型軟體的時候,通常都會採用物件導向語言,而不會採用面向過程語言,可以更好的進行模組化設計,做到軟體設計的準則:高內聚,低耦合!

在c++中,struct關鍵字不僅可以用來定義結構體,它也可以用來定義類(至於c++中struct和class的區別,請大家自行翻閱資料)

c和c++程式執行時的記憶體分布式一樣一樣的,但是他們管理堆記憶體的方式是有區別的,那請大家自己先想想new/malloc有什麼區別?delete/free有什麼區別這兩個問題,另外,new分配記憶體失敗是丟擲異常的,而不是通過返回值和null比較進行判斷的,請注意!

可以參照我的另外兩篇部落格

malloc和new的區別?

new/new和delete/delete的區別原理

面試題 ES和Solr的區別是什麼?

es和solr都是基於lucence框架的分詞技術的倒排索引進行實現的高效能的搜尋引擎框架。solr 2004年誕生 當時是solar elasticsearch 2010年誕生。es更加新。當單純的對已有的資料進行檢索的話,solr的效能優於es。當實時建立索引的時候,solr會進行io阻塞,查詢...

C和C 中struct的區別是什麼

c語言的struct不能有函式成員,而c 的struct可以有 c語言的struct中資料成員沒有private public和protected訪問許可權的設定,而c 的struct的成員有訪問許可權設定 c語言中的struct是沒有繼承關係的,而c 的struct卻有豐富的繼承關係。c語言中的s...

c 經典面試題

1 標頭檔案中的 ifndef define endif 幹什麼用?答 防止該標頭檔案被重複引用。2 include 和 include filename.h 有什麼區別?答 對於 include 編譯器從標準庫路徑開始搜尋 filename.h 對於 include filename.h 編譯器從...