C/C++面試題:C++與C有什么不同?


昨天,小編在一個討論群里看到這樣的對話


 

 

有人想要入學校編程俱樂部,面試時,學長問了她C++的區別,她沒有答上來,就沒有通過。

說到C和C++的區別,不只是進入學校社團有考核,出了學校,找工作面試時,也會遇到這樣的問題,那么該如何回答呢?他們之間有什么區別呢?今天小編就和大家來分享一下~


 

考點:C和C++的聯系與區別

出現頻率:★★★★

解析:

C是一個結構化語言,它的重點在於算法和數據結構。對語言本身而言,C是C++的子集。

C程序的設計首要考慮的是如何通過一個過程,對輸入進行運算處理得到輸出。

對於C++,首要考慮的是如何構造一個對象模型,讓這個模型能夠配合對應的問題,這樣就可以通過獲取對象的狀態信息得到輸出或實現過程控制。

因此C與C++的最大區別在於它們的用於解決問題的思想方法不一樣。

C實現了C++中過程化控制及其它相關功能。而在C++中的C,相對於原來的C還有所加強,引入了重載、內聯函數、異常處理等等,C++更是拓展了面向對象設計的內容,如類、繼承、虛函數、模板和包容器類等等。

在C++中,不僅需要考慮數據封裝,還需要考慮對象粒度的選擇、對象接口的設計和繼承、組合與繼承的使用等等問題。

相對於C,C++包含了更豐富的設計的概念。


 

從C到C++

來源:C語言技術網(www.freecplus.net)

作者:碼農有道

C++讀作“C加加”,是“C Plus Plus”的簡稱,C++是在C語言的基礎上增加新特性,從語法上看,C語言是C++ 的一部分,C語言代碼幾乎不用修改就能夠以 C++ 的方式編譯。

對於C和C++的關系,有很多種說法,從表面上看,很容易認為C++是C的升級版,C++比C高大上,C過時了,有這種想法說明他不了解C/C++語言,我們先來看看世界編程語言排行榜,下表是2019的數據(過去十年的數據也大致如此)。


 

從上表中看出,這個世界上的C程序員比C++程序員多很多。

這么多年了,我也搞不清楚自己是C程序員,還是C++程序員,好像沒什么差別。

C++有很多新的特征,這些新特征並不一定實用,甚至很煩人。但是,C++的開發效率確實比C要高,所以我仍然采用斷章取義的方式來介紹C++的知識。不管是C還是C++,實用就好。


 

一、C++程序的命名規則

C++頭文件一般采用.h后綴,也用有.hpp的。

C++程序文件一般采用.cpp后綴,也有用.cc的,建議采用.cpp,C++對程序文件的命名沒有強制要求,采用.cpp為后綴是大部分程序員的習慣。

二、C++程序的編譯

在某些操作系統中,C和C++是同一個編譯器,在CentOS中,C的編譯器是gcc,C++的編譯器是g++。

1、安裝g++編譯器

用root用戶登錄服務器,執行以下命令安裝或升級gcc-c++編譯器。

yum  -y  install  gcc-c++

如果您的CentOS系統沒有安裝gcc-c++,以上命令就會安裝最新版本的gcc-c++,如果已經安裝了gcc-c++,就會更新到最新版本的gcc-c++,所以,以上命令不管執行多少次都沒有問題。

安裝gcc-c++的前提條件是服務器必須可以訪問互聯網。

2、編譯C++程序

編譯C程序的命令是gcc,編譯C++程序的命令是g++,g++命令和gcc命令的用法相同,把gcc改為g++就可以了,我們在學習C語言時編寫的那些示例程序,基本上都可以用g++來編譯。


 

三、C++是面向對象語言

C語言是面向過程的編程語言,C++是面向對象的編程語言,很多人認為面向對象會比面向過程的方法更先進。仁者和智者的說法各有不同,大家慢慢體會,不能人雲亦雲。

C++的對象,確實可以大幅的提升了C程序員的開發效率,降低程序員犯錯的機會。

四、C++輸入和輸出

在C語言中,我們使用scanf和printf來對數據進行輸入輸出操作。在C++語言中,增加了cin和cout輸入輸出,但是我從來不用它,因為它不實用,對格式化的支持實在是太麻煩。

printf實在太完美,太強大。

五、C++異常

C++增加了異常機制,但是,它從誕生開始就一直有爭議。

我沒有發現C++的異常有什么實用價值,也從來沒有用過它。

六、C++命名空間和模板

了解一下命名空間和模板的概念和用法是可以的,會使用就行,但我不建議自定義命名空間和模板,沒必要把程序搞得那么麻煩。

七、C++布爾類型(bool)

C語言並沒有徹底從語法上支持“真”和“假”,只是用 0 和非 0來代表。這點在 C++中得到了改善,C++

新增了 bool 類型(布爾類型),它占用 1 個字節長度。bool 類型只有兩個取值,true和 false:true 表示“真”,false 表示“假”。

bool 是類型名字,也是 C++ 中的關鍵字,它的用法和 int、char、long是一樣的,可以用=賦值,可以用於函數的參數和返回值。

boolflag=true;// 定義bool型變量flag,賦值為trueif(flag)printf("flag is true");elseprintf("flag is fals");  flag=false;// 把flag賦值為falseif(flag)printf("flag is true");elseprintf("flag is fals");

八、C++定義變量的位置

ANSI C規定,所有局部變量都必須定義在函數開頭,在定義變量之前不能有其他的執行語句。C99標准取消這這條限制,但是某些編譯器對C99的支持很不積極,仍然要求變量定義在函數開頭,或者只支持一部分。

取消限制帶來的另外一個好處是,可以在 for 循環的控制語句中定義變量。

inttotal=0;for(intii=1; ii<=100;ii++)  {    total = total + ii;  }

這個很棒,程序更簡潔,更自由。

九、C++函數的缺省參數

在C語言中,函數在聲明的時候指定了參數列表,調用的時候函數參數的個數、順序和數據類型必須與函數聲明參數列表相同,但是在C++中,聲明函數的時候,可以為函數指定缺省參數,調用時缺省參數可以不填寫。例如:

intwritetofile(FILE *fp,char*strbuf,boolenbuffer=true);// 指定參數enbuffer的缺省值為true

enbuffer參數表示是否啟用緩沖區,writetofile函數被調用的時候,如果只寫fp和strbuf參數,不寫enbuffer參數,enbuffer參數將缺省為true,例如:

writetofile(fp,strbuf);// 調用函數的時候,如果第三個參數enbuffer不填,就用缺省值true

這個不錯,程序更簡潔。

十、C++動態內存管理

在C語言中,動態管理內存用 malloc() 函數,釋放內存用 free() 函數。

在C++中,這兩個函數仍然可以使用,但是C++又新增了兩個關鍵字,new 和 delete,new用來動態分配內存,delete 用來釋放內存。

和C語言的動態內存管理一樣,C++動態內存管理的應用場景不多。

 

如果你對編程感興趣,想要深入學習。這里分享素材包及學習資源,還有免費教程哦(包含C語言、C++WindowsQtLinux相關知識點)~不論是小白還是進階者,在這里都能獲得成長。

點我進入學習基地


免責聲明!

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



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