C 基礎之C與C 的聯絡和不同(一)

2021-08-08 04:28:11 字數 1230 閱讀 5688

c語言是一門非常優秀的面向過程的程式語言,但它也有很多缺點,總的來說就是不太適合現代的軟體開發,例如不容易維護、不容易擴充套件等等,具體缺點我就不描述了,所以c++語言被發明出來。c++完全相容c語言,也增加了一些自己的特性與精華。

由於c++完全相容c語言,所以c語言使用的標頭檔案在c++中都可以用,例如stdio.h、string.h等等,甚至c++檔案也可以用c語言寫。但c++也增加了一些自己的標頭檔案,早期c++標頭檔案都是和c語言標頭檔案類似,如iostream.h,後來變成了iostream,如果包含標頭檔案時使用iostream.h,會因為找不到,出現這樣的錯誤:

在c語言中,全域性變數可以被重定義,這導致在多人合作開發大型專案時,會發生錯誤,因為重定義的變數使用的是同一塊位址空間,而c語言不會檢測出來。在c++中,針對這個情況,增加了命名空間的概念,可以理解為給一塊指定的全域性作用域取乙個名字,不同的命名空間中如果有相同名字的變數,不會發生重定義的情況,因為它們使用的是不同的位址空間,值得注意的是,命名空間名字相同也會發生重定義,但這是乙個錯誤,會被檢測出來。命名空間使用關鍵字namespace 來定義。例如:

namespace namea

}

而關於命名空間的使用也有一些注意點,最直接的使用辦法是使用「::」這個域解析符,例如namea::a,也可以使用關鍵字using,這樣不用加域解析符,使用方法如下:

namespace nameb

int main()

在using宣告之後(如果此宣告在乙個函式之內,函式外不受影響,類似於區域性變數的作用域)使用的變數或者函式等,只要沒指明具體的命名空間,都將使用using宣告的命名空間中的內容。這樣就帶來乙個問題,即和全域性變數產生衝突,也就是二義性。解決這個問題的辦法是使用域解析符。全域性作用域為預設的命名空間,沒有名字,一般情況下不用特別標示,在這種衝突的情況下,域解析符前不加命名空間名來表示全域性作用域的變數(全域性變數)。例如:

int a;

int main()

還有一種匿名空間,即定義時不取名字,經過編譯器轉換後為乙個唯一的名字。使用時,如果不與全域性變數產生二義性,使用方法和全域性變數類似,如果產生衝突,域解析符前不加命名空間名表示的是全域性作用域的變數(全域性變數)。匿名空間可以用來使全域性變數只能在乙個編譯單位內使用,不會影響到其他檔案。

using也可以指定命名空間中的乙個元素開放,僅僅這乙個元素可以不使用域解析符。如using namea::a。

C和C 的聯絡與區別

面向過程的思路 分析解決問題所需的步驟,用函式把這些步驟依次實現。物件導向的思路 把構成問題的事務分解為各個物件,建立物件的目的,不是完成乙個步驟,而是描述某個事務在解決整個問題步驟中的行為。從上述描述可以看出,其實物件導向和面向過程是兩種思考解決問題的方式,其差異主要在於思考的角度。c語言是面向過...

C與C 的區別與聯絡

1 c 與c語言相比有何特點 全面相容c語言 支援物件導向程式設計 c 的可重用性 可擴充性以及可維護性較好。2 c 與c語言程式結構有何不同 c語言的程式結構主要包括預處理程式 自定義型別說明 常量定義 函式定義以及主函式定義幾大部分 c語言的程式結構在c 中也是適用的,此外c 還有類的定義和使用...

C 與C的聯絡與區別

c 與c的聯絡 c 是在c 語言的基礎上開發的一種物件導向程式設計語言,應用廣泛。c 支援多種程式設計正規化 物件導向程式設計 泛型程式設計和過程化程式設計。其程式設計領域眾廣,常用於系統開發,引擎開發等應用領域,是最受廣大程式設計師受用的最強大程式語言之一 支援類 類 封裝 過載等特性 c 在c的...