C++使用命名空間中成員的三種方式


通過簡單的代碼來介紹使用命名空間中成員的三種方式(我們最常用到的命名空間是是標准庫std,下面的命名空間都以std為例):

  • 使用作用域符::
 1 #include<iostream>
 2 int main()
 3 {
 4 ////////求兩個數的和
 5 std::cout<<"Enter two numbers:"<<std::endl;
 6 int v1,v2;
 7 std::cin>>v1>>v2;
 8 std::cout<<"The sum of "<<v1<<" and "<<v2<<" is "<<v1+v2<<std::endl;
 9 return 0;
10 }

前綴std::指出名字cout和cin是定義在名為std的命名空間中的。使用這種方式有一個缺點:當使用標准庫中的一個名字時,必須顯式地說明我們想使用來自命名空間std中 的名字。例如,需要寫出std::cout,通過使用作用域運算符::來指出我們想使用定義在命名空間std中的名字cout。此方法顯得比較繁瑣。

  • using聲明

using聲明的形式:

          using namespace_name::member_name;

其中,using是關鍵字,namespace_name是你將要使用的命名空間的名字,比如標准庫std,member_name是你要使用的命名空間里的成員,比如cin、cout、endl等。

 1 #include<iostream>
 2 ////using 聲明,當我們使用名字cin時,從命名空間std中獲取它
 3 using std::cin;
 4 int main()
 5 {
 6 int i;
 7 cin>>i;  /////正確,cin和std::cin含義相同
 8 cout<<i;  /////錯誤,沒有對應的using聲明,必須使用完整的名字std::cout
 9 std::cout<<i;  ///正確,顯式地從std中使用cout
10 return 011 }

注意:每個using聲明引入命名空間中的一個成員,因此每個名字都需要獨立的using聲明
下面利用using聲明重寫第一個代碼:

 1 #include<iostream>
 2 /////通過下列using聲明,我們可以使用標准庫中的名字
 3 using std::cin;
 4 using std::cout; using std::endl;
 5 int main()
 6 {
 7 cout<<"Enter two numbers:"<<endl;
 8 int v1,v2;
 9 cin>>v1>>v2;
10 cout<<"The sum of "<<v1<<"and"<<v2<<"is"<<v1+v2<<endl;
11 return 0;
12 }

有了using聲明,無須專門的前綴(形如std::)也能使用所需的名字。在上述程序中,一開始就對cin、cout和endl進行using聲明,這意味着我們不用再添加std::形式的前綴就能直接使用它們。

  • using 指示

using指示的形式:

            using namespace NAME;

其中,using和namespace都是關鍵字,NAME是命名空間的名字,如std。如果這里所用的名字不是一個已經定義好的命名空間的名字,則程序將發生錯誤。

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5 cout<<"Enter two numbers:"<<endl;
 6 int v1,v2;
 7 cin>>v1>>v2;
 8 cout<<"The sum of "<<v1<<"and "<<v2<<"is "<<v1+v2<<endl;
 9 return 0;
10 }

    一條using聲明語句一次只引入命名空間中的一個成員,而using指示使得某個特定的命名空間中的所有的成員都是可見的。
補充:如果命名空間名比較長,就會顯得很繁瑣,使用命名空間的別名為其設定一個較簡單的同義詞(或別名)。定義形式:

        namespace primer = cplusplus_primer;

其中,namespace是關鍵字,primer是別名,cplusplus_primer是原來的名字。一個命名空間可以有多個同義詞或別名,所有別名都與命名空間原來的名字等價。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM