程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++命名空間,命名空間

C++命名空間,命名空間

編輯:C++入門知識

C++命名空間,命名空間


概述

在C語言中程序的全局變量作用域只有一個,所有的全局標識符都共享同一個作用域,在多人開發的時候,容易造成標識符沖突。C++為了解決這個問題提出了命名空間這一概念,通過命名空間把全局變量作用域劃分為不同的部分,不同的命名空間中的可以相同但不產生沖突。

      Tips: 標識符:標識符是指常量、 變量、語句標號,用戶自定義函數的名稱,用戶類型等等

 

命名空間定義

namespace name

{

//自定義的標識符

}

 

Tips: 1.在全局作用域也叫默認命名空間,在全局作用域定義的自定義標識符都屬於默認命名空間

         2.命名空間可以嵌套定義

  例

namespace First
{
    int i = 0;
}

namespace Second
{
    int i = 1;
    int j = 2;
    
    namespace Internal
    {
        struct Stu 
        {
            char name[30];
            unsigned int number;
        };
    }
}

 

命名空間的使用

定義了命名空間後,接下來就要使用命名空間了。由於“全局作用域”通過命名空間被劃分為了多個小的全局作用域。因此,使用命名空間中的成員需要先確定成員屬於哪一個命名空間。

 

     直接使用:

       命名空間名::[命名空間名::……]成員名;

     引入:

           1.引入命名空間中所用的成員:using namespace 命名空間名[::命名空間名…];

           2.引入命名空間中的單一成員:using 命名空間名::[命名空間名::……]成員名;

        引入用命名空間的成員之後,就可以直接使用命名空間中的成員的。這就遇到一個問題,當引入成員名稱與局部成員 名稱同名時,會是誰覆蓋誰,還是報錯?編譯器兩者方式都會采取

                   1.當引入命名空間中所用的成員時,局部成員覆蓋命名空間中的成員。

                   2.當引入命名空間中的單一成員時,編譯器報錯。

例:

#include <stdio.h>

namespace First
{
    int i = 0;
}

namespace Second
{
    int i = 1;
    int j = 2;
    
    namespace Internal
    {
        struct Stu 
        {
            char name[30];
            unsigned int number;
        };
    }
}

int main(void)
{
    using namespace First;                  //引入所有成員 
    using Second::Internal::Stu;          //引入單一成員 
    
    printf("i = %d\n", i);                        //引入後直接使用 
    printf("i = %d\n", Second::i);         //直接使用 
    
    Stu stu1 = {"Jude", 1};                 //引入後直接使用 
    
    printf("stu1.name = %s\n", stu1.name);
    printf("stu1.number = %d\n", stu1.number);
    
    
    /**************命名空間的成員與局部變量成員的沖突測試*****************/ 
    int i;                                              //沒問題 
    using Second::j;
    int j;                                              //報錯 
    
    return 0;
}

命名空間的別名

上次將引用的時候所,引用是一個變量的別名。命名空間也是可以用別名。

定義別名:

namespace 別名 = 命名空間名

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved