c 的過載 預設引數和命名空間詳解

2022-05-09 09:33:11 字數 1993 閱讀 4018

c++介紹

c幾乎是c++的乙個子集,所以c語言支援的語法在c++基本都支援並需要使用。c plus plus(c++),所以在c的基礎上又有了很多新的特性。

先說說什麼是過載:c++ 允許多個函式擁有相同的名字,只要它們的引數列表不同就可以,這就是函式的過載(function overloading)。借助過載,乙個函式名可以有多種用途。

舉個例子

void func( )

void func(int x, int y)

int main( )

這就是函式過載。過載支援函式的引數列表不同。引數列表是指引數的型別和引數的個數。

引數的型別有點不好理解。舉個例子。

func(int x,int y);

func(int x,char y);

func(char x,int y);

上面三個函式相互構成過載。所以引數型別指的是兩個函式的得引數對應位置的型別。再來說說為什麼c語言不支援過載,而c++支援這個不許深入到底層去探個究竟,這裡我們要看底層彙編**(我們在linux平台下檢視彙編**,分別採用gcc和g++編譯)gcc一遍自帶,g++需要自己安裝,安裝只需輸入:yum install gcc gcc-c++

下面是執行過程:

從圖中可以看出,c語言和c++在底層的函式解析規則不同,導致c語言不支援從過載。

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

看個栗子:

int add1(int a, int b)

int add2(int a, int b = 1)

int main( )

看看結果

函式在定義時給了預設值,呼叫時如果傳了引數就用實參,如果沒傳就用預設值。這個作用在後面學習類的建構函式很有用。

當然預設引數也有一定的規則:呼叫時你只能從最後乙個引數開始進行省略,換句話說,如果你要省略乙個引數,你必須省略它後面所有的引數,即:帶預設值的引數必須放在參數列的最後面。 預設值必須是常量。顯然,這限制了預設引數的資料型別,例如動態陣列和介面型別的預設引數值只能是 nil;至於記錄型別,則根本不能用作預設引數。 預設引數必須通過值參或常參傳遞。

以關鍵字namespace開始,其後接命名空間的名字:

namespace myname1

namespace myname2

命名空間的名字在其所在作用域中是唯一的,命名控制項可以在全域性作用域或者其它作用域內部定義,但是不能在函式或者類的內部定義。

▶每個命名空間都是乙個作用域:

這就不會出現c語言中的命名衝突問題。像上面的**有兩個變數a,但是不會出現命名衝突。

▶從命名空間外部使用命名空間成員:

myname1::a;

當我們使用該變數時要加上作用域限定符。

▶命名空間可以巢狀定義:

namespace myname2

}

這樣是可以的。

以上執行結果:

注意:命名空間作用域不能以分號結束。

c 的過載 預設引數和命名空間

c 介紹 c幾乎是c 的乙個子集,所以c語言支援的語法在c 基本都支援並需要使用。c plus plus c 所以在c的基礎上又有了很多新的特性。先說說什麼是過載 c 允許多個函式擁有相同的名字,只要它們的引數列表不同就可以,這就是函式的過載 function overloading 借助過載,乙個...

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

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

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

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