開發(fā)網(wǎng)站通過第三方微信認(rèn)證登錄開發(fā)費用北京seo運營推廣
在我們接觸C++之前,C語言中有時候會有使用全局變量,全局變量在使用過程中可能會發(fā)生沖突,這個沖突有時會是我們與庫之間的沖突,有時又會是我們自己定義的之間的沖突,那么這時候命名空間的出現(xiàn)將很好的解決這個問題,下面我們來學(xué)習(xí)一下這個知識點
命名空間我們從這個定義的名字就不難看出,這是將標(biāo)識符的名稱進(jìn)行本地化,也就是為這些變量建立一個域,來限制其作用的空間,而namespace關(guān)鍵字就是針對這一情況
#include <stdio.h>
#include <stdlib.h>
int rand = 100;int main()
{printf("%d\n", rand);return 0;
}
//rand是一個函數(shù),而我們在主函數(shù)外又定義了rand變量為100,這時計算機(jī)不知道使用哪個
命名空間的定義
? ? ? ? 首先使用關(guān)鍵字namespace后面跟命名空間stu,然后跟一對大括號'{ }',而{}中的即為命名空間s的成員,命名空間中可以定義變量、函數(shù)、類型;
? ? ? ? 同時命名空間也是可以嵌套的
//命名空間內(nèi)可以定義變量、函數(shù)、類型namespace stu
{int a;int max(int num1,int num2){return num1>num2?num1:num2;}struct student{char name[6];int age;}
}//命名空間可以嵌套定義
namespace my_std
{int num3;namespace stu{int a;int max(int num1,int num2){return num1>num2?num1:num2;}struct student{char name[6];int age;}}
}//命名空間是可以存在多個相同名字的命名空間的,編譯器最后會合成同一個
namespace s1
{int a;int b;
}
namespace s1
{int c;int d;
}//編譯器合成后
namespace s1
{int a;int b;int c;int d;
}
注意:一個命名空間就定義了一個新的作用域,命名空間中的所有內(nèi)容都局限于該命名空間中
當(dāng)我們展開一個命名空間時,也就意味著將該空間內(nèi)的內(nèi)容放在了全局中,這也是我們經(jīng)常見到有些代碼一開始就寫上using namespace std; 這句意味著將std標(biāo)準(zhǔn)庫內(nèi)的內(nèi)容展開,我們在使用庫里的例如cout時就可以直接使用,否則我們則需要這樣寫std::cout。當(dāng)然我們也可以指定展開例如:using std::cout;這樣只需要在開頭寫上后面都可以正常使用。
?輸入、輸出? ? ? ?
? ? ? ? 在C中我們使用scanf()與printf()來實現(xiàn)標(biāo)準(zhǔn)輸入輸出,在C++中我們使用cin和cout來實現(xiàn)輸入輸出,例如
#include <iostream>
using namespaced std;
//using std::cin; 只使用標(biāo)準(zhǔn)庫中的cinint main()
{int x;cin >> x;cout << x <<endl;
}
在這里輸入和輸出“可以自動識別類型”,當(dāng)然這里自動識別類型是經(jīng)過重載實現(xiàn)的,這個在后期我們會進(jìn)行學(xué)習(xí)。
缺省參數(shù)
? ? ? ? 首先缺省參數(shù)必須是常量或全局變量,C++允許在同一作用域中聲明幾個功能類似的同名函數(shù),這些同名函數(shù)的 形參列表(參數(shù)個數(shù)、類型、類型順序)不同,返回值沒有要求。
?
?注意半缺省:從右往左缺省參數(shù)
? ? ? ? ? ? ? ? ? ? ? 從左往右傳實參
當(dāng)在傳實參的時候不傳使用默認(rèn)參數(shù),當(dāng)你傳參時,則用傳過去的參數(shù)。
另外函數(shù)缺省參數(shù)寫在聲明中。
? ? ?