在很大程度上,標準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的區別
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中,...