C++入門基礎知識

1. 命名空間

  1. 作用: 實際上就是一個由程序設計者命名的內存區,程序設計者可以根據需要指定一些有名字的空間域,把一些全局實體分別放在各個命名空間中,從而與其他全局實體分隔開來。
  2. 訪問方法:用 作用域解析符:: 來訪問,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. 重載

  1. 什麼事函數重載:在同一作用域類,一組函數的函數名相同,參數列表不同(個數不同/類型不同),返回值可同可不同
  2. 爲什麼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;
}
  1. 做參數:
//【引用傳遞】如果形參爲引用類型,則形參是實參的別名。
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 ;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章