C++之命名空間(End Chapter)

來源:互聯網
上載者:User

  今天這一節,注意要講C++中的命名空間和標頭檔的命名規則。也是C++這一基礎系列的最後一節。首先感謝在學習C++的一路上,有這麼多關注這系列的博友們的陪伴和協助。正因為有了你們的建議和指導,使我對C++有了更深的認識和更大的興趣。這個系列結束之後,我會繼續學習和關注C++的一些實際應用。

  大家都知道一個大型軟體通常是由多個模組組成的,這些模組往往是由不同的人合作完成,最後組成一個完整的程式。假如不同的人分別定義了函數和類,放在不同的標頭檔中,在主檔案需要用到這些函數和類時,用#include命令列將這些標頭檔包括進來。但由於各個標頭檔是由不同的人設計的,可能在不同的標頭檔中會有相同的名字來定義函數或類,這樣就會出現命名衝突的問題。同時如果在程式中用到第三方類庫,也會有同樣的問題。為解決這一問題,ANSI/ISO C++引入命名空間,即一個程式設計者命名的記憶體地區。程式設計者根據需要指定命名空間,並將命名空間中聲明的標識符和命名空間關聯起來,這樣就保證不同命名空間的同名標識符不發生衝突。它的一般格式:

  namespace 命名空間名

  {

    標識符1;

    標識符2;

    ...

  }

花括弧內是命名空間的範圍。其實在之前所有的章節中都用到過一個C++指定的一個標準命名空間std。是否還記得在C++的發展,特點和來源程式構成 這一節中的樣本裡用到過using namespace std語句,其含義就是使用標準命名空間std。它是單詞standard的縮寫,標準C++庫中的所有標識符都在這個命名空間中,比如我們常用到的iostream標頭檔中的函數、類、對象等都在std命名空間中定義。如果要調用命名空間裡的函數、類、對象等,有兩種方法:(1)在原檔案中使用"using namespace 命名空間名",再直接調用標識符;(2)在標識符前面加上命名空間以及範圍運算子"::";

自訂標頭檔university.h:

1 namespace Peking //聲明命名空間Peking
2 {
3 int rank=47;//標識符
4 }
5
6 namespace Tsinghua //聲明命名空間Tsinghua
7 {
8 int rank=54;//與Peking同名標識符
9 }

使用檔案university.h及命名空間:

 1 #include "stdafx.h"
2 #include <iostream>
3
4 #include "university.h"//載入標頭檔university.h
5 usingnamespace Peking;//顯式使用標頭檔university.h中的命名空間Peking
6
7 int main()
8 {
9 std::cout<<"世界大學排名(2010)"<<std::endl;
10
11 std::cout<<"北京大學:"<<rank<<std::endl;//rank等同於Peking::rank
12 std::cout<<"清華大學:"<<Tsinghua::rank<<std::endl;//標識符rank前面加上命名空間Tsinghua以及範圍運算子"::"
13
14 return0;
15 }

結果:

  最後來說說C++中標頭檔的命名規則,因為C++是從C語言發展而來的,為了與C相容,C++保留了C語言中的一些規定,其中就包括用.h作為尾碼的標頭檔,比如大家所熟悉的:stdio.h、math.h和string.h等。但後來ANSI/ISO C++建議標頭檔不帶尾碼".h"。但為了使原來編寫的C++的程式能夠運行,在C++程式中的標頭檔既可以採用不帶尾碼的標頭檔,也可以採用C語言中帶尾碼的標頭檔。在C++中使用這兩種形式的標頭檔都可以,只不過有幾個注意點需要說明一下:(1)如果C++程式中使用了帶尾碼".h"的標頭檔,那麼不必在程式中聲明命名空間,只需要檔案中包含標頭檔即可;(2)C++標準要求系統提供的標頭檔不帶尾碼".h",但為了表示C++與C的標頭檔既有聯絡又有區別,C++中所用標頭檔不帶尾碼".h",而是在C語言的相應標頭檔名之前加上首碼c:

1 #include <cstdio>//等同於C中的#include<stdio.h>
2 #include <cstring>//等同於C中的#include<string.h>
3 #include <cmath>//等同於C中的#include <math.h>

End

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.