天天看點

C++中 auto自動變量,命名空間,using作用以及作用域



1.auto關鍵字的用途

a:自動變量,可以自動擷取類型,輸出,類似泛型

b:自動變量,可以實作自動循環一維數組

c:自動循環的時候,對應的必須是常量

2.auto自動變量,自動比對類型的案例如下:

C++中 auto自動變量,命名空間,using作用以及作用域

注意:如果是在qt下運作上面的的程式需要加上c++11的相關配置(config += c++11)

C++中 auto自動變量,命名空間,using作用以及作用域

3.通過auto關鍵字自動循環一維數組的案例

#include<iostream>

#include<stdlib.h>

#include<iomanip>

usingnamespacestd;

voidmain()

{

   //定義一維數組,下面的數組名是一個指針常量

   intnum[10]

= { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

   //通過循環周遊出數組

   for

(autodata

:num)

   {

       cout

<<setw(5) <<data;

   }

   cout

<<endl;

   //當變成二維數組之後,不能直接通過auto來輸出

   //auto自動循環begin endl;必須是一個數組的常量

   doublenum2[2][5]

= { 1.0, 2.0, 3.0, 4.5, 5, 6, 7, 8, 9, 10 };

:num2)//泛型c++文法,循環一維數組,是個常量

<<data <<std::endl;

       for

(inti

= 0;i < 5;i++)

       {

           std::cout<<setw(5)

<< *(data +i);

       }

   system("pause");

}

運作結果如下:

C++中 auto自動變量,命名空間,using作用以及作用域

4.關于頭檔案

在c++中,為了區分c++,c++中不使用.h檔案頭

5.c++注重類型,它是一種強類型語言,嚴格檢查類型。

6.c++中的輸出函數,寬字元輸出,賦初值的方式,輸出符,::域控制符

#include<iostream>  //在c++中,為了區分c++,c++中不使用.h檔案頭

   inta

= 5;

   //c++中指派:a變量名(數值) b:變量名=數值,通過這兩種方式。

   intb(5);

<<a <<"

" <<b

   //通過括号指派

   doublec(3.5);

<<c <<endl;

   //通過等号指派

   char

*pstr ="1234";

<< *pstr <<"

" <<pstr

*str("china");

<< *str <<"

" <<str

   //寬字元,漢子,棒子文

   wchar_t

*str2(l"china");

   wcout

<< *str2 <<"

" <<str2

C++中 auto自動變量,命名空間,using作用以及作用域

   //輸出符

<<

   //std命名空間

   //::域控制符

   std::cout

<< "hello world";

7.一個檔案中使用另外一個檔案中聲明的變量的時候,c++要求顯示的加上extern關鍵字調用這個全局變量。

8.調用命名空間中的變量已經命名空間中的函數

a:有名命名空間

#include"iostream"

#include"stdlib.h"

namespacemyspace

   inta(15);

   voidprint()

       std::cout

<< "鋤禾日當午"

<< std::endl;

namespacemyspacea

   inta(25);

<< "aaaaaaaaaaaa" <<std::endl;

   inta(5);

   //如果想不被上面的a變量影響,而直接通路命名空間

   //中的變量,這裡要加上命名空間名

<< "myspace a = " <<myspace::a

   //調用myspacea中定義的變量a

<< "myspacea a = " <<myspacea::a

<< "main a = " <<a

<<std::endl;

   //調用命名空間中的函數

   myspace::print();

   myspacea::print();

C++中 auto自動變量,命名空間,using作用以及作用域

b:無名命名空間

//沒有命名的命名空間中的參數可以直接調用

namespace

   inta(3);

<< "gogogo";

   //說明沒有命名的命名空間可以直接調用a

<< a <<std::endl;

   print();

   getchar();

輸出結果是:

3

gogogo

c:命名空間中所有的資料,函數,類,對象都是共有的,結構體内部的預設是共有的。

案例如下:

//namespace所有資料,函數,類,對象都是共有

namespacerunmove

   inty(5);

   int(*padd)(int,int);//函數指針接口

   inty1(5);

   classmyclass

       //類中的變量等預設是私有的

   public:

       inta;

   };

//對應上面的函數指針

intadd(inta,intb)

   returna

+b;

intaddp(inta,intb)

<< a <<"

//結構體預設是透明的(public的)

structmystruct

   intb;

private:

   inta;//是私有

};

   //namespace所有資料,函數,類,對象都是共有

   mystructstruct1;//結構體内部預設公有

   struct1.b

= 20;

<< struct1.b

<< runmove::y

<< " " <<runmove::y1

   runmove::padd

= addp;

<< runmove::padd(5,

6) << std::endl;

9.使用using關鍵字的時候,必須在命名空間的後面

關于作用域:

a:在函數體内使用using的時候,using的作用域是從using這行代碼開始到函數體結束。

b:函數體外使用using的時候,作用域是從using這行代碼開始到檔案本檔案結尾。

案例說明:

namespacemydata

   inta(6);

namespaceyourdata

   inta(8);

//如果想使用mydata這個明明空間,并且使用using關鍵字,這時候要把using放

//在mydata命名空間後面

usingnamespacemydata;

usingnamespaceyourdata;

//using如果變量重名,會出現不明确錯誤,加上命名空間修飾符

voidgo()

   //命名空間如果在塊語句内部,作用域是定義開始到語句結束

<< mydata::a

//using namespacemydata;//作用域為從代碼開始到結束

<< yourdata::a

10.命名空間的嵌套,為命名空間起别名,命名空間的拓展

namespacerunrunrunrun

   inta(10);

*str("gogogo");

   namespacerun  //命名空間的嵌套

       inta(9);

//命名空間的拓展

   int y(5);

   //int a(15);重定義錯誤

//注意這裡的r就是别名,而不是後者

namespacer

=runrunrunrun;//給命名空間起一個别名

   //命名空間可以嵌套

<< r::run::a

<< r::y

<< r::a

C++中 auto自動變量,命名空間,using作用以及作用域

11.關于預設參數問題

  a:預設參數必須放在右邊

  b:預設參數中間不允許出現不預設的

#include<stdio.h>

//預設參數必須放在右邊

//預設參數中間不允許出現不預設的

voidprint(intc,inta

= 1,intd

= 2,intb

= 3)

<< a <<b

<<c <<std::endl;

voidprintf(doublec)

<< "hello,world" <<std::endl;

   //print(1,2,3);

   //函數指針沒有預設參數,必須全部輸入資料

   void(*pt1)(intc,inta,intd,intb)

=print;

   pt1(100,1,2,3);//函數指針調用,沒有用預設的

   print(100);

繼續閱讀