1. 命名空間
- 作用: 實際上就是一個由程序設計者命名的內存區域,程序設計者可以根據需要指定一些有名字的空間域,把一些全局實體分別放在各個命名空間中,從而與其他全局實體分隔開來。
- 訪問方法:用 作用域解析符:: 來訪問,AA : : x,AA表示空間域,x表示成員(名字)。
namespace AA1//AA1域(空間)
{
int a = 1;//成員
}
namespace AA2
{
int a = 2;
}
int a = 3;
int main()
{
int a = 4;
cout<<a<<end1;//輸出4,就近原則
cout<<::a<<end1;//3,全局變量,域缺省時,表示全局域
cout<<AA1::a<<end1;//1,
cout<<AA2::a<<end1;//2,
}
2. C++的基本輸入輸出流。
cout是標準輸出流對象,<< 是輸出操作符;
cin是標準輸入流對象,>>是輸入操作符;
endl是換行操作符;
他們都屬於C++標準庫,所以都在std的名字空間裏面。
1. C++怎麼控制double等浮點類型的輸出位數嗎?
2. 怎麼控制輸出一個數字的八進制和16進制嗎?
3. 重載
- 什麼事函數重載:在同一作用域類,一組函數的函數名相同,參數列表不同(個數不同/類型不同),返回值可同可不同
- 爲什麼C語言不支持重載,而C++支持:例如函數:void function(int x, int y)
在C語言中,經過編譯器編譯後,庫中的名字爲 _function
而在C++中,經編譯器編譯後,庫中的名字爲_function_int_int, 即C++函數參數不同,函數名不同的函數在庫中定義的函數名就不同。(與返回值無關)。
// _Z12OverloadFuncid
void OverloadFunc (int x, double d)
{}
// _Z12OverloadFuncdi
void OverloadFunc (double x, int d)
4. C++缺省參數
// 全缺省參數
int Add1 (int a = 10, int b = 20)
{
return a + b;
}
// 半缺省參數
int Add2 (int a, int b = 30)
{
return a + b;
}
////錯誤缺省參數
//int Add3 (int a = 40, int b)
//{
// return a + b;
//}
void Test ()
{
Add1();//結果:30
Add1(1);//21
Add1(1,1);//2
Add2(2);//32
Add2(2,2);//22
}
5. 指針和引用
指針我們在C語言中已經有所瞭解,就不用囉嗦,我們只看引用,和指針做比較
1. 引用的概念:
引用不是定義一個新的變量,而是給一個已經定義的變量重新起一個別名
2. 定義的格式爲:
類型 &引用變量名 = 已定義過的變量名;
3. 引用的特點:
- 一個變量可取多個別名
- 引用必須初始化
- 引用只能在初始化的時候引用一次,不能改變爲再引用其他的變量。
4. 使用方法:
void TestReference1 ()
{
int a = 1;
int& b = a;
cout<<"a:address->" <<&a<< endl;
cout<<"b:address->" <<&b<< endl;
a = 2;
b = 3;
int& c = b; // 引用一個引用變量,別名的別名
c = 4;
}
- 做參數:
//【引用傳遞】如果形參爲引用類型,則形參是實參的別名。
void Swap (int& left, int& right)
{
int temp = left;
right = left ;
left = temp ;
}//會改變實參的值
//測試值傳遞/引用傳遞的效率
struct BigData
{
int array [1000];
};
void DealBigData (BigData& x)//35
{
x.array [0]= 0;
x.array [1]= 1;
x.array [2]= 2;
}
void DealBigData (Bigdata x)//125
{
}
#include <Windows.h>
void TestReference3 ()
{
BigData bd ;
int begin = GetTickCount ();
for (int i = 0; i < 1000000; ++i )
{
DealBigData(bd );//125
}
int end = GetTickCount ();
cout<<"cost time:" <<end - begin<<endl ;
}