程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 解析C++和C的區別

解析C++和C的區別

編輯:C++入門知識

C語言是一種結構化語言。它層次清晰,便於按模塊化方式組織程序,易於調試和維護。在很大程度上,標准C++是標准C的超集.實際上,所有C程序也是C++程序,然而,兩者之間有少量區別.下面簡要介紹一下最重要的區別.
 

在C++中,民,局部變量可以在一個程序塊內在任何地方聲明,在C中,局部變量必須在程序塊的開始部分,即在所有"操作"語句之前聲明,請注意,C99標准中取消了這種限制.
在C中,按如下方式聲明的函數沒有對函數變元進行任何說明;
int func();
也就是說,如果沒有在函數後面的括孤內指定任何變元,這在C中就意味著對函數變元未做任何聲明,該函數可能有變元,也可能沒有變元,然而,在C++中,這樣的函數聲明意味著該函數沒有變元,也就是說,在C++中,下面這兩個函數聲明具有同樣的作用:
int func();
int func(void);

在C++中,變元列表中的void是任選的.許多C++程序員使用它們是為了表明函數沒有任何變元的,以便於他人理解程序.但是,從技術上說,void不是必須的.
 

在C++中,所有函數均必須被設計成原型,但這在C中只是一種選擇.編程經驗表明,在程序中也應該給函數采用原型設計方法.在C與C++之間還存在一個重要而又細微的差別,即字符常數在C中被自動作為整形來處理,但在C++中則不然.
 

在C中,多次聲明一個全局變量雖然不可取,但不算錯.在C++中,多次聲明同一個全局變量會引發錯誤.
 

在C中,一個標識符可以至少31個有效的組成字符.

在C++中,一個標識符的所有組成字符均是有效的.可是,從實用角度看,過長的標識符沒有太大的用處,不僅不便於記憶,而且還會增加出現打字錯誤的可能性.
在C中,在程序內部調用main()函數的情形不常見,但這種做法是容許的,在C++中,這種做法是不容許的.
在C中,無法獲得register型的地址,在C++中則可以獲得這種地址.
在C中,如果類型聲明語句中沒有指定類型名,該類型被假定成int,這種隱式轉型在C99與C++中是不允許的.

#include
using namespace std;
為什麼沒有.h後綴名?

名稱iostream沒有擴展名.h,原因是是標准C++所定義的新式頭部文件之一,新式C++頭部文件不再使用.h擴展名.
第二行告訴編譯程序使用std名稱空間,名稱空間是最近才添加到C++中,一個名稱空間建立一個聲明范圍,在該范圍內可以放置各種程序元素.名稱空間用來幫助組織大型程序的結構.這條using語句通知編譯程序,程序員需要使用std名稱空間,這是整個標准C++庫聲明所使用的名稱空間.通過使用sdt名稱空間,程序可以簡化對標准庫的訪問.普通C程序僅使用C子集,不需要名稱空間語句,因為C的庫函數在默認的全局名稱空間中是可使用的.

類與結構體的區別:類與結構體是相互關聯的

結構是C的一部分,C++從C中繼承了結構,在語法上,類與結構十分相似,在關系上,這兩者也很接近,在C++中,結構的作用被拓寬了,進而使結構成為了類的一種替代方法.實際上,類與結構的惟一區別在於:在默認狀態下,結構的所有成員均是公有的,而類的所有成員是私有的.除此之外,類與結構是等價的,也就是說,一個結構定義了一個類的類型.
C++同時包含這兩個等價的關鍵字struct與class基於3個方面的原因.第一,加強結構的能力.在C中,結構提供了一種數據分組方法,因而讓結構包含成員函數是一個小小的改進.第二,由於類與結構是相互關聯的,所有現有C代碼到C++的移植變得更容易.第三,由於類與結構的等價性,提供兩個不同的關鍵字可以使類定義自由發展,為了保持C++與C的兼容性,結構定義必須始終受它的C定義的結束.
即使在有些地方可以使用結構來代替類,但盡量不要這麼做,為了清楚起見,該用類的地方就用class關鍵字,該用C結構的地方就用struct關鍵字.

類與聯合是相互關聯的

聯合也可以用來定義類.在C++中,聯合包含成員函數,變量以及構造與析構函數.C++聯合保留了C聯合的全部特征,其中最重要的特征是所有數據元素共享內存的相同地址.與結構類似,聯合的成員在默認狀態下也是公有的,並且完全兼容於C.與結構一樣,C++中的聯合聲明定義了一種特殊的類,進而意味著保持了類的封裝原則.
 

C++的聯合有幾個必須遵守的使用限制.第一,聯合不能繼承其他任何類型的類.第二,聯合不能是基類,不能包含有虛函數成員.靜態變量不能是聯合的成員.聯合不能使用引用成員,而且不能有任何作為成員的重載賦值運算符的對象.第三,如果一個對象包含明確的構造或析構函數,該對象不能成為聯合的成員.
 

C++有一個叫做匿名聯合的特殊聯合.匿名聯合沒有類型名,也不聲明任何變量,只是告訴編譯程序它的成員變量共享一個內存地址.但是,變量本身無需要使用常規的點運算符語法即可直接引用.
 

上述聯合的使用限制也適用於匿名聯合,但下面這兩個限制除外,第一,匿名聯合所包含的元素只能是數據,不能包含成員函數,也不能包含私有或受保護元素;第二,全局匿名聯合必須聲明成靜態的.

通過本文的介紹,我們可以了解到,C是C++的基礎,C++語言和C語言在很多方面是兼容的。因此,掌握了C語言,再進一步學習C++就能以一種熟悉的語法來學習面向對象的語言,從而達到事半功倍的目的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved