新聞中心
C語言是一種結(jié)構(gòu)化語言。它層次清晰,便于按模塊化方式組織程序,易于調(diào)試和維護。在很大程度上,標準C++是標準C的超集.實際上,所有C程序也是C++程序,然而,兩者之間有少量區(qū)別.下面簡要介紹一下最重要的區(qū)別.

成都服務(wù)器托管,創(chuàng)新互聯(lián)提供包括服務(wù)器租用、資陽服務(wù)器托管、帶寬租用、云主機、機柜租用、主機租用托管、CDN網(wǎng)站加速、域名注冊等業(yè)務(wù)的一體化完整服務(wù)。電話咨詢:13518219792
在C++中,民,局部變量可以在一個程序塊內(nèi)在任何地方聲明,在C中,局部變量必須在程序塊的開始部分,即在所有"操作"語句之前聲明,請注意,C99標準中取消了這種限制.
在C中,按如下方式聲明的函數(shù)沒有對函數(shù)變元進行任何說明;
int func();
也就是說,如果沒有在函數(shù)后面的括孤內(nèi)指定任何變元,這在C中就意味著對函數(shù)變元未做任何聲明,該函數(shù)可能有變元,也可能沒有變元,然而,在C++中,這樣的函數(shù)聲明意味著該函數(shù)沒有變元,也就是說,在C++中,下面這兩個函數(shù)聲明具有同樣的作用:
int func();
int func(void);
在C++中,變元列表中的void是任選的.許多C++程序員使用它們是為了表明函數(shù)沒有任何變元的,以便于他人理解程序.但是,從技術(shù)上說,void不是必須的.
在C++中,所有函數(shù)均必須被設(shè)計成原型,但這在C中只是一種選擇.編程經(jīng)驗表明,在程序中也應該給函數(shù)采用原型設(shè)計方法.在C與C++之間還存在一個重要而又細微的差別,即字符常數(shù)在C中被自動作為整形來處理,但在C++中則不然.
在C中,多次聲明一個全局變量雖然不可取,但不算錯.在C++中,多次聲明同一個全局變量會引發(fā)錯誤.
在C中,一個標識符可以至少31個有效的組成字符.
在C++中,一個標識符的所有組成字符均是有效的.可是,從實用角度看,過長的標識符沒有太大的用處,不僅不便于記憶,而且還會增加出現(xiàn)打字錯誤的可能性.
在C中,在程序內(nèi)部調(diào)用main()函數(shù)的情形不常見,但這種做法是容許的,在C++中,這種做法是不容許的.
在C中,無法獲得register型的地址,在C++中則可以獲得這種地址.
在C中,如果類型聲明語句中沒有指定類型名,該類型被假定成int,這種隱式轉(zhuǎn)型在C99與C++中是不允許的.
#include
using namespace std;
為什么沒有.h后綴名?
名稱iostream沒有擴展名.h,原因是 是標準C++所定義的新式頭部文件之一,新式C++頭部文件不再使用.h擴展名.
第二行告訴編譯程序使用std名稱空間,名稱空間是最近才添加到C++中,一個名稱空間建立一個聲明范圍,在該范圍內(nèi)可以放置各種程序元素.名稱空間用來幫助組織大型程序的結(jié)構(gòu).這條using語句通知編譯程序,程序員需要使用std名稱空間,這是整個標準C++庫聲明所使用的名稱空間.通過使用sdt名稱空間,程序可以簡化對標準庫的訪問.普通C程序僅使用C子集,不需要名稱空間語句,因為C的庫函數(shù)在默認的全局名稱空間中是可使用的.
類與結(jié)構(gòu)體的區(qū)別:類與結(jié)構(gòu)體是相互關(guān)聯(lián)的
結(jié)構(gòu)是C的一部分,C++從C中繼承了結(jié)構(gòu),在語法上,類與結(jié)構(gòu)十分相似,在關(guān)系上,這兩者也很接近,在C++中,結(jié)構(gòu)的作用被拓寬了,進而使結(jié)構(gòu)成為了類的一種替代方法.實際上,類與結(jié)構(gòu)的惟一區(qū)別在于:在默認狀態(tài)下,結(jié)構(gòu)的所有成員均是公有的,而類的所有成員是私有的.除此之外,類與結(jié)構(gòu)是等價的,也就是說,一個結(jié)構(gòu)定義了一個類的類型.
C++同時包含這兩個等價的關(guān)鍵字struct與class基于3個方面的原因.第一,加強結(jié)構(gòu)的能力.在C中,結(jié)構(gòu)提供了一種數(shù)據(jù)分組方法,因而讓結(jié)構(gòu)包含成員函數(shù)是一個小小的改進.第二,由于類與結(jié)構(gòu)是相互關(guān)聯(lián)的,所有現(xiàn)有C代碼到C++的移植變得更容易.第三,由于類與結(jié)構(gòu)的等價性,提供兩個不同的關(guān)鍵字可以使類定義自由發(fā)展,為了保持C++與C的兼容性,結(jié)構(gòu)定義必須始終受它的C定義的結(jié)束.
即使在有些地方可以使用結(jié)構(gòu)來代替類,但盡量不要這么做,為了清楚起見,該用類的地方就用class關(guān)鍵字,該用C結(jié)構(gòu)的地方就用struct關(guān)鍵字.
類與聯(lián)合是相互關(guān)聯(lián)的
聯(lián)合也可以用來定義類.在C++中,聯(lián)合包含成員函數(shù),變量以及構(gòu)造與析構(gòu)函數(shù).C++聯(lián)合保留了C聯(lián)合的全部特征,其中最重要的特征是所有數(shù)據(jù)元素共享內(nèi)存的相同地址.與結(jié)構(gòu)類似,聯(lián)合的成員在默認狀態(tài)下也是公有的,并且完全兼容于C.與結(jié)構(gòu)一樣,C++中的聯(lián)合聲明定義了一種特殊的類,進而意味著保持了類的封裝原則.
C++的聯(lián)合有幾個必須遵守的使用限制.第一,聯(lián)合不能繼承其他任何類型的類.第二,聯(lián)合不能是基類,不能包含有虛函數(shù)成員.靜態(tài)變量不能是聯(lián)合的成員.聯(lián)合不能使用引用成員,而且不能有任何作為成員的重載賦值運算符的對象.第三,如果一個對象包含明確的構(gòu)造或析構(gòu)函數(shù),該對象不能成為聯(lián)合的成員.
C++有一個叫做匿名聯(lián)合的特殊聯(lián)合.匿名聯(lián)合沒有類型名,也不聲明任何變量,只是告訴編譯程序它的成員變量共享一個內(nèi)存地址.但是,變量本身無需要使用常規(guī)的點運算符語法即可直接引用.
上述聯(lián)合的使用限制也適用于匿名聯(lián)合,但下面這兩個限制除外,第一,匿名聯(lián)合所包含的元素只能是數(shù)據(jù),不能包含成員函數(shù),也不能包含私有或受保護元素;第二,全局匿名聯(lián)合必須聲明成靜態(tài)的.
通過本文的介紹,我們可以了解到,C是C++的基礎(chǔ),C++語言和C語言在很多方面是兼容的。因此,掌握了C語言,再進一步學習C++就能以一種熟悉的語法來學習面向?qū)ο蟮恼Z言,從而達到事半功倍的目的。
當前文章:解析C++和C的區(qū)別
本文路徑:http://m.fisionsoft.com.cn/article/ccsiesd.html


咨詢
建站咨詢
