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 同一工程中允許存在多個相同名稱的明明空...