C 與C的區別

2021-08-03 06:47:14 字數 2472 閱讀 3455

一、什麼是c++

c++是c語言的繼承,它既可以進行c語言的過程化程式設計,又可以進行以抽象資料型別為特點的基於物件的程式設計,還可以進行以繼承和多型為特點的物件導向的程式設計。

二、c與c++的區別

1.原檔案 c ***.c c++ ***.cpp

2.標準輸入輸出標頭檔案c stdio.h c++ 一般不帶h(也可帶.h,c++要區別與c語言的話就不帶h,不 帶.h的標頭檔案一般比帶.h的標頭檔案更加全面),c++引入了命名空間namespace

3.輸入輸出: c printf scanf(輸入輸出要明確以什麼格式輸入輸出) c++ cout cin

4.過載: c不支援過載 c++ 支援過載

5.自定義型別: c 結構體struct c++ 類class

6. c語言中不允許空的結構體,並且定義變數必須以struct student stu ;

c++直接以類名為型別建立物件 student stu;

7.c語言是面向過程的語言(以函式為核心),c++是物件導向的以物件為基礎

三、命名空間 namespace

其實是為了避免變數或函式重新命名的問題。試想,乙個專案組內多個工程師進行開發,有可能會出現全域性變數或函式重名的現象,而如果每個人都定義了自己的命名空間,就可以解決這個問題,即使重名,只要分屬不同的命名空間就不會引起問題

這樣大家應該明白了,命名空間就是將多個變數和函式等包含在內,使其不會與命名空間外的任何變數和函式等發生重新命名的衝突。

四、struct 與class的區別

沒有本質區別,在c語言中是結構體面向過程,而c++中是類物件導向

1,結構是實值型別(value types),而類則是引用型別(reference types)。

2,結構使用棧儲存(stack allocation),而類使用堆儲存(heap allocation)。

3,所有結構成員預設都是public,而類的變數和常量數則預設位private,不過其他類成員預設都是public。

4,結構成員不能被宣告位protected,而類成員可以。

5,結構變數宣告不能指定初始值、使用new關鍵字貨對陣列進行初始化,但是類變數宣告可以。

6,結構不能宣告預設的建構函式,也就是不擁有引數的非共享建構函式,但是類則無此限制。

7,二者都可以擁有共享建構函式,結構的共享建構函式不能帶有引數,但是類的共享建構函式則可以帶或者不帶引數。

8,結構不允許宣告析構函式(destructor),類則無此限制。

9,結構的例項(instance)宣告,不允許對包含的變數進行初始化設定,類則可以在宣告類的例項時,同時進行變數初始化。

10,結構是隱式繼承自valuetype類,而且不能繼承任何其他型別,類則可以繼續自valuetype以外的任何類。

11,結構是無法被繼承的,類則可以。

12,結構永遠不會終止,因此clr不會在任何結構上呼叫finalize方法。類則是由記憶體**程序加以終止,當記憶體**程序檢測到沒有任何作用的類時,它就會呼叫類的finalize方法。

13,結構不需要建構函式,類則需要建構函式。

14,結構只能在一種情況下使用非共享建構函式,那就是非共享建構函式會接受引數。但是類則無此限制,它可以使用帶引數或不帶引數的非共享建構函式。

14,每乙個結構都具有無引數的隱含公共建構函式,此建構函式會將結構的所有成員初始化為其預設值。不需要重新定義這個行為。

在"例項和變數"層面上,由於結構是數值型別的,因此每乙個結構變數會永遠的繫結到結構例項上。然而類是引用型別的,而且物件變數可引用不同的類例項,在此方面的區別,會對使用將結構和類造成如下的影響:

15,結構變數會隱式的使用結構的無引數建構函式來初始化成員,這就意味語句 struct s = new struct()。

16,當您將乙個結構變數賦值給另乙個,或者將結構例項傳遞到程式變數時,所有變數成員的值會複製到新的結構中。當您將乙個物件變數賦值給另乙個,或者將物件變數傳遞給程式時,則只是複製指標。

17,您可以將null值賦值給結構變數,但是該例項會一直與該變數保持關聯。雖然變數成員會因此賦值而重新初始化,但是您還是可以呼叫變數的方法並訪問其資料成員。相反的,如果您將物件變數設定為null,您就會中斷它與任何型別例項的關聯,而且除非您再將另乙個例項賦值給它,否則無法通過變數訪問任何成員。

18,您可以在不同時間將不同的類的例項賦值給同乙個物件變數,而且在同一時間可有好幾個物件變數引用相同的類例項,如果您對類成員值做了改變,則其他指向相同例項的物件變數也會發生改變。然而,結構成員則會封裝在他們自己的例項中,變更結構成員值並不會對其他任何結構變數的成員造成影響,甚至也不會影響相同結構宣告的其他例項。

19,兩個結構必須以成員對成員的比較方式來執行相等比較。兩個物件變數可以使用equals方法來加以比較。equals會判斷兩個變數是否指向相同的例項。

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中,...