C 與C的區別

2021-08-22 08:50:43 字數 3583 閱讀 6725

c++和c的區別

c語言是面向過程程式設計,c++是物件導向程式設計

面向過程程式設計就是分析出解決問題的步驟,然後把這些步驟一步一步的實現,使用的時候乙個乙個的依次呼叫就可以了。

物件導向程式設計就是把問題分解成各個物件,建立物件的目的不是為了完成乙個步驟,而是為了描述某個事物在整個解決問題步驟中的行為。

面向過程程式設計的效能比物件導向高,因為類呼叫的時候需要例項化,開銷比較大,比較消耗資源。但是面向過程卻沒有物件導向易維護,易復用,易擴充套件。

程式設計的最終目的就是為了解耦和復用。由於物件導向程式設計有封裝,繼承,多型等性質,可以設計出低耦合的系統。

具體的幾大區別

我們可以說,c++是c的超集,也可以說c是c++的子集。

我們都知道,c++編譯器能夠編譯任何c程式,那麼c和c++還有什麼差別呢?

1、關鍵字和變數

c++相對與c增加了一些關鍵字,如下:

typename,bool,dynamic_cast,mutable,namespace

static_cast,using,catch,xplicit,new,virtual,operator,false,private template,volatile,const,protected,this,wchar_t,const_cast,public ,throw,friend,true,reinterpret_cast,try等等。

在c++中還增加了bool型變數和wchar_t型變數:

1.布林型變數是有兩種邏輯狀態的變數,它包含兩個值:真和假。

如果在表示式中使用了布林型變數,那麼將根據變數值的真假而賦予整型值1或0。要把乙個整型變數轉換成布林型變數,如果整型值為0,則其布林型值為假;反之如果整型值為非0,則其布林型值為真。布林型變數在執行時通常用做標誌,比如進行邏輯測試以改變程式流程。

2.c++中還包括wchar_t資料型別,wchar_t也是字元型別,但是是那些寬度超過8位的資料型別。許多外文字符集所含的數目超過256個,char字元型別無法完全囊括。wchar_t資料型別一般為16位。

2、標準輸入輸出流

在c語言中,輸入輸出是使用語句scanf()和printf()來實現的,而c++中是使用類來實現的。

cin,cout,endl都是物件。

注意:它們本身並不是c++語言的組成部分。雖然他們已經是ansi標準c++中被定義,但是他們不是語言的內在組成部分。在c++中不提供內在的輸入輸出運算子,這與其他語言是不同的。輸入和輸出是通過c++類來實現的,cin和cout是這些類的例項,他們是在c++語言的外部實現。

3、函式引數問題

函式形參不用變數名

宣告函式時可以包含乙個或多個用不到的形式引數。這種情況多出現在用乙個通用的函式指標呼叫多個函式的場合,其中有些函式不需要函式指標宣告中的所有引數。

比如:

int fun(int x,int) //注意不同

函式的預設引數

c++函式的原型中可以宣告乙個或多個帶有預設值的引數,也就是支援引數預設。

如果呼叫函式時,省略了相應的實際引數,那麼編譯器就會把預設值作為實際引數。

具體請看博文(這裡寫鏈結內容)

4、函式過載

在c++中,允許有相同的函式名,不過它們的引數型別不能完全相同,這樣這些函式就可以相互區別開來。而這在c語言中是不允許的。

關於過載具體請看博文(這裡寫鏈結內容)

5、變數作用域

c++語言中,允許變數定義語句在程式中的任何地方,只要在是使用它之前就可以;而c語言中,必須要在函式開頭部分。

而且c++允許重複定義變數,c語言也是做不到這一點的。

eg:

#include

using

namespace

std;

int a;

int main()

6、new和delete運算子

在c++語言中,仍然支援malloc()和free()來分配和釋放記憶體,同時增加了new和delete來管理記憶體。

關於記憶體分配的知識請看博文(這裡寫鏈結內容)

7、引用型變數

在c++中,引用是乙個經常使用的概念。引用型變數是其他變數的乙個別名。

比如:

先宣告乙個名為a的變數,它還有乙個別名b。我們可以認為是乙個人,有乙個真名,乙個外號,以後不管是喊他a還是b,都是叫他這個人。同樣,作為變數,以後對這兩個識別符號操作都會產生相同的效果。

引用的初始化

和指標不同,引用變數的值不可改變。引用作為真實物件的別名,必須進行初始化,除非滿足下列條件之一:

(1) 引用變數被宣告為外部的,它可以在任何地方初始化

(2) 引用變數作為類的成員,在建構函式裡對它進行初始化

(3) 引用變數作為函式宣告的形參,在函式呼叫時,用呼叫者的實參來進行初始化

作為函式形參的引用

引用常常被用作函式的形參。

以引用代替拷貝作為形參的優點:

(1)引用避免了傳遞大型資料結構帶來的額外開銷

(2)引用無須象指標那樣需要使用*和->等運算子

以引用方式呼叫

當函式把引用作為引數傳遞給另乙個函式時,被呼叫函式將直接對引數在呼叫者中的拷貝進行操作,而不是產生乙個區域性的拷貝(傳遞變數本身是這樣的)。這就稱為以引用方式呼叫。把引數的值傳遞到被呼叫函式內部的拷貝中則稱為以傳值方式呼叫。

以引用作為返回值

8、try/catch/throw異常處理機制

異常處理基本思想:

執行乙個函式的過程中發現異常,可以不用在本函式內立即進行處理,而是丟擲該異常,讓函式的呼叫者直接或間接處理這個問題。

c++異常處理機制由3個模組組成:try(檢查)、throw(丟擲)、catch(捕獲)

丟擲異常的語句格式為:throw 表示式;如果try塊中程式段發現了異常則丟擲異常。

如下:

try 

catch(型別名[形參名])//捕獲特定型別的異常

catch(型別名[形參名])//捕獲特定型別的異常

catch(…)//捕獲所有型別的異常

9、字串變數和字串類

在c++中提供了string類,用string類可以定義字串變數。

字串變數可以直接用「=」賦值,也可以相互賦值,同時支援對字串的某乙個字元賦值。

eg:

string

word = 」 china」;

word[2] = 『a』;

所以,c++對字串的處理方法有兩種:

1.字元陣列,稱為c—string方法

2.用string類定義字串變數,稱為string方法

10、內建函式(也叫內聯函式)

內建函式在宣告及定義時函式名前要加inline作為內建函式的標誌。

c++中使用內建函式會提高程式的效率,但同時會增加程式的長度,在每次呼叫內建函式的時候,編譯系統都會複製內建函式的**並插入程式中,增加了程式的長度、

同時,c++規定內建函式中不允許有複雜的控制語句,例如迴圈語句及switch語句 ,只有那些規模較小而又頻繁呼叫的簡單函式,才適合被宣告為內建函式。

C 與C的區別

l c如果不寫返回值,預設是int,而c 中不能不寫返回值 可用void表示無返回值 如func1 l int func1 在c中表示可帶任意引數的函式,這是c的漏洞,使得它避開了引數型別檢查 而c 中表示不帶引數的函式。2 標頭檔案的區別 l c 的標頭檔案去掉了c中的.h,以c字首開始。比如,變...

C與C 的區別

1.void型指標 int x malloc sizeof int 10 在c裡面是合法的,但是在c 中編譯不通過。從bjarne stroustrup給出的解釋是這種型別是不安全的。就是說你可以使用乙個void型的指標指向任何位址,如果你分配了乙個位址給這個void指標指向另乙個與它型別不同的指標...

C與C 的區別

在很大程度上,標準c 是標準c的超集.實際上,所有c程式也是c 程式,然而,兩者之間有少量區別.下面簡要介紹一下最重要的區別.在c 中,民,區域性變數可以在乙個程式塊內在任何地方宣告,在c中,區域性變數必須在程式塊的開始部分,即在所有 操作 語句之前宣告,請注意,c99標準中取消了這種限制.在c中,...