命名空間
概念
在C/C++中,變量、函數(shù)和后面要學(xué)到的類都是大量存在的,這些變量、函數(shù)和類的名稱將都存
在于全局作用域中,可能會導(dǎo)致很多沖突。使用命名空間的目的是對標(biāo)識符的名稱進(jìn)行本地化,
以避免命名沖突或名字污染,namespace關(guān)鍵字的出現(xiàn)就是針對這種問題的
簡單一句話命名空間是用來避免命名沖突或者名字污染的。
命名空間的定義
//定義命名空間
//命名空間可以定義變量/結(jié)構(gòu)體/自定義類型/函數(shù) 等等
namespace ljp
{
//命名空間可以定義變量/結(jié)構(gòu)體/自定義類型/函數(shù) 等等
int rand = 0;
struct Stack
{
int* a;
int top;
int size;
};
int add(int a, int b)
{
return a + b;
}
}
命名空間的三種使用方式
//完全展開
using namespace ljp;
//部分展開
using ljp::rand;
int main()
{
// :: 域作用限定符
//ljp :: rand
std::cout << ljp::rand << std::endl;
int a = 0;
int b = 10;
std::cout << ljp::add(a, b) << std::endl;
return 0;
}
命名空間的嵌套
在命名空間里在嵌套一個命名空間
namespace ljp
{
//命名空間可以定義變量/結(jié)構(gòu)體/自定義類型/函數(shù) 等等
int rand = 0;
struct Stack
{
int* a;
int top;
int size;
};
int add(int a, int b)
{
return a + b;
}
//命名空間可以嵌套
namespace zhangsan
{
int rand1 = 10;
}
}
int add(int a, int b)
{
return a + b;
}
命名空間也可以自動合并
namespace combine
{
int range = 0;
}
namespace combine
{
int i = 10;
}
using combine::range;
using combine::i;
int main()
{
cout << range + i << endl;
return 0;
}
缺省函數(shù)
概念
缺省參數(shù)是聲明或定義函數(shù)時為函數(shù)的參數(shù)指定一個缺省值。在調(diào)用該函數(shù)時,如果沒有指定實
參則采用該形參的缺省值,否則使用指定的實參
缺省函數(shù)的分類
全缺省參數(shù)
int func1(int a = 10, int b = 20, int c = 30)
{
return a + b + c;
}
半缺省參數(shù)
//半缺省,只能從右到左缺省
int func(int a, int b = 10)
{
return a + b;
}
int main()
{
//傳參可以選擇不傳函數(shù)定義時給形參賦值的參數(shù)
cout << func(10) << endl; //返回20
cout << func(30, 30) << endl; //返回60
cout << func1() << endl; //返回60
}
注意事項
- 半缺省參數(shù)必須從右往左依次來給出,不能間隔著給
- 缺省參數(shù)不能在函數(shù)聲明和定義中同時出現(xiàn)
//缺省參數(shù)不能在函數(shù)聲明和定義中同時出現(xiàn)
//函數(shù)缺省的聲明和函數(shù)定義要分開,并且只能在聲明時給形參賦值
//不這樣做的話會報錯,這么做是為了防止聲明和定義給形參不同的值
//編譯器會識別不出該用哪個形參的值就會發(fā)生錯誤
int func1(int a, int b = 30, int c = 30);
int func1(int a, int b, int c)
{
return a + b + c;
}
流插入和流提取
int main()
{
int a = 10;
//流插入運(yùn)算符
cout << a << endl;
int i = 0;
//流提取運(yùn)算符
cin >> i;
cout << i << endl;
return 0;
}
函數(shù)重載
概念
自然語言中,一個詞可以有多重含義,人們可以通過上下文來判斷該詞真實的含義,即該詞被重
載了。
比如:以前有一個笑話,國有兩個體育項目大家根本不用看,也不用擔(dān)心。一個是乒乓球,一個
是男足。前者是“誰也贏不了!”,后者是“誰也贏不了!”
函數(shù)重載:是函數(shù)的一種特殊情況,C++允許在同一作用域中聲明幾個功能類似的同名函數(shù),這
些同名函數(shù)的形參列表(參數(shù)個數(shù) 或 類型 或 類型順序)不同,常用來處理實現(xiàn)功能類似數(shù)據(jù)類型
不同的問題文章來源:http://www.zghlxwxcb.cn/news/detail-571248.html
//函數(shù)類型不同
void Swap(int* a, int* b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void Swap(double* a, double* b)
{
double temp = *a;
*a = *b;
*b = temp;
}
//參數(shù)個數(shù)不同
void f()
{
cout << "f()" << endl;
}
void f(int a)
{
cout << "f(int a)" << endl;
}
//參數(shù)類型順序不同
void f(int a, char b)
{
cout << "f(int a,char b)" << endl;
}
void f(char b, int a)
{
cout << "f(char b, int a)" << endl;
}
//會根據(jù)所傳參數(shù)的不同來調(diào)用不同的重載函數(shù)
int main()
{
int a = 10, b = 20;
double c = 10.1, d = 10.2;
Swap(&a,&b);
Swap(&c,&d);
cout << "交換后:" << a << " " << b << endl;
cout << "交換后:" << c << " " << d << endl;
return 0;
}
//構(gòu)成函數(shù)重載
//但是只能調(diào)用第二個函數(shù),這里會產(chǎn)生歧義,因為缺省函數(shù)可以傳一個值,但是第一個函數(shù)只能傳一個值
//編譯器不知道去調(diào)用哪一個。
void func(int a)
{
cout << "void func(int a)" << endl;
}
void func(int a, int b = 1)
{
cout << "void func(int a, int b)" << endl;
}
我們下一篇再見!文章來源地址http://www.zghlxwxcb.cn/news/detail-571248.html
到了這里,關(guān)于c++ ——命名空間、缺省函數(shù)、函數(shù)重載的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!