最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++語言基礎(chǔ) 命名空間

 更新時(shí)間:2020年01月31日 17:18:59   投稿:mdxy-dxy  
一個(gè)中大型軟件往往由多名程序員共同開發(fā),會(huì)使用大量的變量和函數(shù),當(dāng)有兩個(gè)人都同時(shí)定義了一個(gè)名字相同的全局變量或函數(shù)的時(shí)候,若是把他們的代碼整合在一塊編譯,此時(shí)編譯器就會(huì)提示變量或函數(shù)重復(fù)定義,C++為了解決這個(gè)問題,便引用了命名空間(namespace)的概念

C++的命名空間的使用

C++語言引入命名空間(Namespace)這一概念主要是為了避免命名沖突,其關(guān)鍵字為 namespace。

科技發(fā)展到如今,一個(gè)系統(tǒng)通常都不會(huì)僅由一個(gè)人來開發(fā)完成,不同的人開發(fā)同一個(gè)系統(tǒng),不可避免地會(huì)出現(xiàn)變量或函數(shù)的命名沖突,當(dāng)所有人的代碼測(cè)試通過,沒有問題時(shí),將所有人的代碼結(jié)合到一起,因?yàn)樽兞炕蚝瘮?shù)重名而導(dǎo)致的問題將會(huì)造成一定的混亂,例如:

int flag = 1; //小李聲明的變量
// …… //中間間隔若干行代碼
bool flag = true; //小韓聲明的變量

注意:此例僅為解釋命名空間所用,在公司的系統(tǒng)開發(fā)中并非如此中所述,完全僅靠命名空間來解決命名沖突的,具體編程規(guī)范可以參考林銳的《高質(zhì)量程序設(shè)計(jì)指南》一書。

如上所示,因?yàn)閭€(gè)人習(xí)慣不同,小李喜歡聲明int型變量用于邏輯判斷,而小韓則更喜歡采用bool類型變量。但兩個(gè)聲明放到同一個(gè)函數(shù)中的時(shí)候,很明顯編譯器會(huì)提示出flag變量重新定義的錯(cuò)誤。這種問題若不加以處理是無法編譯通過的。

可以使用命名空間解決類似上面的命名沖突問題,例如:

namespace Li{ //小李的變量聲明
int flag = 1;
}
namespace Han{ //小韓的變量聲明
bool flag = true;
}

小李與小韓各自定義了以自己姓氏為名的命名空間,此時(shí)將小李與小韓的flag變量定義再置于同一個(gè)函數(shù)體中,則不會(huì)有任何問題,當(dāng)然在使用這兩個(gè)變量的時(shí)候需要指明所采用的是哪一個(gè)命名空間中的flag變量。

指定所使用的變量時(shí)需要用到“::”操作符,“::”操作符是域解析操作符。例如:

Li::flag = 0; //使用小李定義的變量flag
Han::flag = false; //使用小韓定義的變量flag

我們已經(jīng)定義了兩個(gè)命名空間 Li 和 Han,并在其中各自聲明flag變量,使用的時(shí)候則需要分別用域解析操作符指明此時(shí)用的flag變量是誰定義出來的flag變量,是小韓還是小李定義的。

除了直接使用域解析操作符,還可以采用using聲明(using declaration),例如:

using Li::flag;
flag = 0; //使用小李定義的變量flag
Han::flag = false; //使用小韓定義的變量flag

在代碼的開頭用using聲明了Li::flag,其含義是using聲明以后的程序中如果出現(xiàn)未指明的flag時(shí),則使用Li::flag,但是若要使用小韓定義的flag,則仍需要Han::flag。

using聲明不僅僅可以針對(duì)命名空間中的一個(gè)變量,也可以用于聲明整個(gè)命名空間,例如:

using namespace Li;
flag = 0; //使用小李定義的變量flag
Han::flag = false; //使用小韓定義的變量flag

如果命名空間Li中還定義了其他的變量,則同樣具有flag變量的效果,在using聲明后,若出現(xiàn)未具體指定命名空間的命名沖突變量,則默認(rèn)采用Li命名空間中的變量。
命名空間內(nèi)部不僅可以聲明或定義變量,對(duì)于其它能在命名空間以外聲明或定義的實(shí)體,同樣也都能在命名空間內(nèi)部進(jìn)行聲明或定義,例如變量的聲明或定義、函數(shù)的聲明或定義、typedef等都可以出現(xiàn)在命名空間中。

下面我們來看一個(gè)簡單的C++程序的示例:

#include<iostream>
using namespace std;
int main(){
 cout<<"hello world!"<<endl;
  return 0;
}

這是一個(gè)簡單的C++程序hello world示例,在程序中采用了using聲明命名空間std,using namespace std; 這一語句涵蓋了std命名空間中的所有標(biāo)識(shí)符,而該命名空間包含C++所有標(biāo)準(zhǔn)庫。頭文件iostream文件中定義的所有變量、函數(shù)等都位于std命名空間中,每次使用iostream中的變量或函數(shù)都需要在前面加上std::是非常麻煩的一件事,為此可直接用using聲明將std中的所有變量或函數(shù)等都聲明出來。

如果不用using namespace std;這一語句,則程序應(yīng)該像下面這樣:

#include<iostream>
  int main(){
  std::cout<<"hello world!"<<std::endl;
  return 0;
  }

這樣看起來是相當(dāng)麻煩的,如果在某次使用iostream中變量或函數(shù)時(shí)漏掉std則會(huì)導(dǎo)致為定義標(biāo)識(shí)符錯(cuò)誤。

C++語言是以C語言為基礎(chǔ)的,它繼承了所有的C語言函數(shù)庫,但C++對(duì)這些標(biāo)準(zhǔn)庫都重新命名了。標(biāo)準(zhǔn)C頭文件(如math.h)重命名為cmath,去掉頭文件的.h,并在前面加上c。因此在C++中如需使用math.h頭文件則可以按照如下方式使用。

#include<cmath>
using namespace std;

以下的 是我的簡單的工程代碼

namespace 頭文件的代碼

#ifndef NAMESPACE_H
#define NAMESPACE_H
namespace Li{  //小李的變量聲明
  int flag = 1;
}
namespace Han{  //小韓的變量聲明
  bool flag = true;
}
#endif // NAMESPACE_H

主函數(shù)的代碼

#include <iostream>
#include "namespace.h"
using namespace std;
using namespace Li;

int main(int argc, char *argv[])
{
  cout << Li::flag << endl;
  Li::flag = 9;
  cout << Li::flag << endl;
  return 0;
}

輸出的結(jié)果是

下面是其他網(wǎng)友的補(bǔ)充

一個(gè)中大型軟件往往由多名程序員共同開發(fā),會(huì)使用大量的變量和函數(shù),當(dāng)有兩個(gè)人都同時(shí)定義了一個(gè)名字相同的全局變量或函數(shù)的時(shí)候,若是把他們的代碼整合在一塊編譯,此時(shí)編譯器就會(huì)提示變量或函數(shù)重復(fù)定義,C++為了解決這個(gè)問題,便引用了命名空間(namespace)的概念。

一.語法格式

namespace 是C++中的關(guān)鍵字,用來定義一個(gè)命名空間,語法格式為:

namespace name{
  //variables, functions, classes
}

name是命名空間的名字,它里面可以包含變量、函數(shù)、類、typedef、#define 等,最后由{ }包圍。

注意:也可以不用寫name,若定義了一個(gè)沒有名字的命名空間,則其內(nèi)部的代碼只能在這個(gè)文件里面用。

namespace {
  int myAge = 0;
}

二.使用方法

若要使用命名空間中定義的變量或函數(shù),需要指名它們所在的命名空間,如:

#include <stdio.h>
#include <iostream>

using namespace std;

namespace DJ{
  int myAge = 0;
}


int main()
{
  DJ::myAge = 5;
  cout << "my age is: "<< DJ::myAge << endl;
  return 0;
}

::是一個(gè)新符號(hào),稱為域解析操作符,在C++中用來指明要使用的命名空間。

還可以這樣寫(直接使用using聲明):

#include <stdio.h>
#include <iostream>

using namespace std;

namespace DJ{
  int myAge = 0;
}


int main()
{
  using DJ::myAge;
  myAge = 5;
  cout << "my age is: "<< myAge << endl;
  return 0;
}

在代碼的開頭使用using聲明DJ:myAge,這樣如果接下來的代碼中出現(xiàn)了未指明命名空間的myAge,就使用DJ:myAge,不過要使用別的命名空間中定義的myAge,則仍然需要顯示聲明。

還可以寫成這樣:

#include <stdio.h>
#include <iostream>

using namespace std;

namespace DJ{
  int myAge = 0;
}


int main()
{
  using namespace DJ;
  myAge = 5;
  cout << "my age is: "<< myAge << endl;
  return 0;
}

如果命名空間 DJ中定義的其他的變量,樣具有 myAge變量的效果。

命名空間內(nèi)部不僅可以聲明或定義變量,對(duì)于其它能在命名空間以外聲明或定義的名稱,同樣也都能在命名空間內(nèi)部進(jìn)行聲明或定義,例如類、函數(shù)、typedef、#define 等都可以出現(xiàn)在命名空間中。

三.std命名空間

新建一個(gè)純C++項(xiàng)目(QT)時(shí),QT默認(rèn)新建的main.cpp文件如下:

#include <iostream>
using namespace std;

int main()
{
  cout << "Hello World!" << endl;
  return 0;
}

其實(shí)是省略了cout的命名空間,也可以寫成這樣:

#include <iostream>

int main()
{
  std::cout << "Hello World!" << std::endl;
  return 0;
}

相關(guān)文章

  • linux之sort命令的用法

    linux之sort命令的用法

    sort將文件的每一行作為一個(gè)單位,相互比較,比較原則是從首字符向后,依次按ASCII碼值進(jìn)行比較,最后將他們按升序輸出
    2013-10-10
  • C++調(diào)用tensorflow教程

    C++調(diào)用tensorflow教程

    今天小編就為大家分享一篇關(guān)于C++調(diào)用tensorflow教程,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • C++利用棧實(shí)現(xiàn)中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式

    C++利用棧實(shí)現(xiàn)中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式

    這篇文章主要為大家詳細(xì)介紹了C++利用棧實(shí)現(xiàn)中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 使用C++的string實(shí)現(xiàn)高精度加法運(yùn)算的實(shí)例代碼

    使用C++的string實(shí)現(xiàn)高精度加法運(yùn)算的實(shí)例代碼

    下面小編就為大家?guī)硪黄褂肅++的string實(shí)現(xiàn)高精度加法運(yùn)算的實(shí)例代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-09-09
  • C語言中結(jié)構(gòu)體、聯(lián)合體的成員內(nèi)存對(duì)齊情況

    C語言中結(jié)構(gòu)體、聯(lián)合體的成員內(nèi)存對(duì)齊情況

    這篇文章主要給大家介紹了關(guān)于C語言中結(jié)構(gòu)體、聯(lián)合體的成員內(nèi)存對(duì)齊情況的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • C程序?qū)崿F(xiàn)整數(shù)的素?cái)?shù)和分解問題

    C程序?qū)崿F(xiàn)整數(shù)的素?cái)?shù)和分解問題

    這篇文章主要介紹了C程序?qū)崿F(xiàn)整數(shù)的素?cái)?shù)和分解問題,對(duì)于算法的學(xué)習(xí)有不錯(cuò)的借鑒價(jià)值,需要的朋友可以參考下
    2014-09-09
  • Objective-C 消息傳遞機(jī)制詳解

    Objective-C 消息傳遞機(jī)制詳解

    Objective-C語言中方法的傳遞有二種:①Selector ② Blocks,本文主要說一下Selector,本文以O(shè)bjective-C 消息傳遞機(jī)制進(jìn)行詳細(xì)介紹,關(guān)于Blocks會(huì)在后續(xù)總結(jié)一下
    2012-11-11
  • C++遺傳算法類文件實(shí)例分析

    C++遺傳算法類文件實(shí)例分析

    這篇文章主要介紹了C++遺傳算法的一個(gè)類文件,是學(xué)習(xí)遺傳算法的絕佳參考資料,需要的朋友可以參考下
    2014-08-08
  • C++實(shí)現(xiàn)推箱子功能附加回撤示例

    C++實(shí)現(xiàn)推箱子功能附加回撤示例

    本文主要介紹了C++實(shí)現(xiàn)推箱子功能附加回撤示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 簡要介紹C++編程中的友元函數(shù)和友元類

    簡要介紹C++編程中的友元函數(shù)和友元類

    這篇文章主要介紹了C++編程中的友元函數(shù)和友元類,屬于較為冷僻的知識(shí),在實(shí)際開發(fā)中較少使用,需要的朋友可以參考下
    2015-09-09

最新評(píng)論

澄江县| 沈丘县| 左权县| 德惠市| 建湖县| 金溪县| 天峻县| 唐山市| 尼玛县| 中宁县| 广汉市| 中超| 独山县| 昭平县| 南宁市| 正蓝旗| 枞阳县| 黑龙江省| 二连浩特市| 无棣县| 来宾市| 信宜市| 察雅县| 韶关市| 全州县| 同江市| 根河市| 德江县| 盐池县| 桐庐县| 离岛区| 皋兰县| 清涧县| 自治县| 卢湾区| 织金县| 突泉县| 高邮市| 蕲春县| 仪陇县| 前郭尔|