c 的過載,預設引數,以及命名空間

2021-08-20 22:10:28 字數 1212 閱讀 2609

c++是c語言的繼承,它既可以進行c語言的過程化程式設計,又可以進行以抽象資料型別為特點的基於物件的程式設計,還可以進行以繼承和多型為特點的物件導向的程式設計。c++擅長物件導向程式設計的同時,還可以進行基於過程的程式設計,因而c++就適應的問題規模而論,大小由之。

關於c++的幾個小方面的想法

c++支援函式過載而c語言不支援函式過載。

而所謂的函式過載就是指:

在同一作用域類,一組函式的函式名相同,引數列表不同(個數不同或型別不同),返回值可同可不同。

那麼問題來了,為什麼c++支援函式過載,而c語言不支援呢?

因為在編輯鏈結過程中會生成符號表

乙個函式的宣告為:

void a(int x,int y);

在c語言中,編譯器在編譯後在符號表裡的名字為_a

在c++中,編譯器在編譯後在庫中的名字為_a_int_int

也就是說即使函式同名,也會因為不同的引數型別,不同的引數個數而產生不同的名字,也就對應這不同的函式,也就從而實現過載了。

預設引數就是在宣告或者定義函式的某個引數的時候為之指定乙個預設值,在呼叫該函式的時候如果採用該預設值,你就無須指定該引數。

預設引數使用主要規則:

1.呼叫時你只能從最後乙個引數開始進行省略,換句話說,如果你要省略乙個引數,你必須省略它後面所有的引數,即:帶預設值的引數必須放在參數列的最後面。

2.預設值必須是常量。顯然,這限制了預設引數的資料型別, 預設引數必須通過值參或常參傳遞。

例如: void show(char * array,int length=1) ;

我呼叫可以: show(「hello」,6);

c++ 中引入namespace(名字空間)的概念,主要是為了減少名字衝突的問題,隨著源**規模的增大,產生名字衝突的可能性也會越來越高,如兩家公司的類庫中都有乙個名為「stack」的類,那麼當你需要同時用到這兩個公司的類庫時,就會產生名字衝突,無法區分是哪乙個stack,因此,一般公司都會把自己的類,函式,變數等放在乙個名字空間中,防止衝突,如:

namespace s1

namespace s2

這樣就在兩個名字空間中宣告了兩個不同的變數 a,

如果想要同時在乙個原始檔中使用這兩個 a,可以這樣做:

int c = s1::a; // 表示 s1 中的 a

int d = s2::a; // 表示 s2 中的 a

C 函式過載 預設引數以及命名空間

c 入門 在接觸c 之前太多人都說 c 很難,非常難 今天我也要開始一探這c 的水了,為了避免淹死,索性我也就不去那深水區蹚了,就在這淺灘裡走一走。c 是一門通用的程式語言,廣泛應用於系統軟體與應用軟體的開發,而我一直一來學習的c語言幾乎是c 的乙個子集。所以c語言支援的語法c 基本都支援並且需要用...

c 命名空間 函式過載 預設引數

在c c 中,變數 函式和類都是大量存在的,這些變數 函式和類的名稱將都存在於全域性作用 域中,可能會導致很多衝突。使用命名空間的目的是對識別符號的名稱進行本地化,以 避免命名衝突或名字汙染,namespace 關鍵字的出現就是針對這種問題的。1.1 命名空間的定義 namespace n1 1.1...

C 命名空間 預設引數 函式過載

使用命名空間是要對識別符號的名稱進行本地初始化,避免命名衝突。定義命名空間需要用到namespace關鍵字,後跟命名空間的名字,在 內為命名空間的成員 普通的命名空間 namespace n1 巢狀的命名空間 namespace n2 namespace n3 同一工程中允許存在多個相同名稱的明明空...