作用域

標識符的作用域有函數(shù)原型作用域、局部作用域(塊作用域)、類作用域和 命名空間(namespace) 作用域

函數(shù)原型作用域

函數(shù)原型作用域 函數(shù)原型作用域 是C++ 程序中最小的作用域——函數(shù)原型的聲明中一定要包含形參的名稱和類型說明。實際上現(xiàn)在大家應(yīng)該也能夠感受得到, 在函數(shù)原型聲明時形式參數(shù)的作用范圍就是函數(shù)原型作用域 。
對于Clock類中的成員函數(shù):

1void setTime(int newS,int newM,int newH){
2//函數(shù)體
3
}

newS, newM,newH這三個標識符——也就是這個函數(shù)的三個形參——其作用域僅僅局限于這個函數(shù)的函數(shù)體,也就是說大括號范圍之內(nèi),在程序的任何其他地方都不能引用這個標識符——所以它們的作用域被稱為函數(shù)原型作用域

局部作用域(塊作用域)

局部作用域這里的 局部作用域 主要指的是同一個函數(shù)體內(nèi)(可以是主函數(shù)也可以是其他自定義的函數(shù)),使用大括號分割的不同代碼塊——在我們的日常開發(fā)過程中,較為常見的就是選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)的局部作用域。
這里我們可以舉個簡單的例子:

void function(int a){//a的作用域開始
    int b=a;//b的作用域開始
    cin >> b;
    if (b<0) {//c的作用域開始
    int c=b+10;
    for(int i=0;i<c;i++){//i的作用域開始
      //循環(huán)體
      }//i的作用域結(jié)束
    //更多代碼
    }//c的作用域結(jié)束
  //b的作用域結(jié)束
}//a的作用域結(jié)束

已經(jīng)知道,函數(shù)形參的作用域,從形參列表開始,到函數(shù)體結(jié)束之處結(jié)束。而對于 函數(shù)體內(nèi)聲明的變量,其作用域從聲明處開始,一直到聲明所在的塊結(jié)束的大括號為止 。所謂 塊 ,就是被大括號括起來的一段程序。比如if后面的分支,for后面的循環(huán)體,都是程序中的塊——大括號之間可以相互嵌套,塊與塊之間也存在著包含關(guān)系——一個變量的作用域,從自己被聲明處開始,一直到它所在的塊結(jié)束為止——具有局部作用域的變量也叫 局部變量 。

類作用域
  • 類作用域類可以被看做是一組有名字的成員的集合——具體地說,某一個類Class的成員member具有類作用域——對于member的訪問,有以下幾種方式:
  • 如果在class的任意一個成員函數(shù)中,沒有聲明同名的局部作用域標識符,那么這個成員函數(shù)就可以直接訪問成員member。也就是說,member在類的成員函數(shù)中都起作用。
  • 通過表達式object.member或者Class::member來訪問(其中object是Class的一個實例對象),這正是程序中訪問對象成員的最基本方法。其中Class::member的訪問方式適用于類的 靜態(tài)成員 ,相關(guān)內(nèi)容將會在后續(xù)的課程中介紹。
  • 通過ptr->member這樣的表達式——其中ptr是指向Class的某個實例對象的 指針 。關(guān)于指針的內(nèi)容將在后面的章節(jié)詳細介紹
命名空間(namespace) 作用域

命名空間的語法組織形式如下:

namespace 命名空間名{
    命名空間內(nèi)的各種聲明(函數(shù)聲明,類聲明等)
}

一個命名空間自身即確定了一個作用域,凡是在該命名空間內(nèi)聲明的,不屬于前面提到的各個作用域的標識符,都屬于這個命名空間的作用域。在命名空間的內(nèi)部,可以直接引用當前命名空間中聲明的標識符——如果需要引用其他命名空間中的某個標識符的話,可以使用這樣的語法:

命名空間名::標識符名
namespace NS{
    class Class{
    //類成員
    }
}
NS::Class object;

在標識符前面總是使用這樣的命名空間限定會顯得過于冗長——為此,我們可以使用C++ 中提供的using語句,形式如下:

using 命名空間名::標識符名;
using namespace 命名空間;

前一種形式將指定的某一個標識符暴露在當前的作用域內(nèi),這樣我們就可以直接使用這個標識符了——而后一種形式則是直接引用整個命名空間,然后就可以使用這個命名空間里的所有標識符了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 作者:浪里行舟 Fundebug經(jīng)授權(quán)轉(zhuǎn)載,版權(quán)歸原作者所有。 前言 JavaScript 中有一個被稱為作用域(...
    Fundebug閱讀 7,926評論 0 15
  • 作用域 作用域,在維基百科上解釋是:在電腦程序設(shè)計中,作用域(scope,或譯作有效范圍)是名字(name)與實體...
    禮知白閱讀 271評論 0 0
  • 作用域是JavaScript最重要的概念之一,想要學(xué)好JavaScript就需要理解JavaScript作用域和作...
    筆墨是小舟閱讀 277評論 0 1
  • 一、JavaScript作用域 任何程序設(shè)計語言都有作用域的概念,簡單的說,作用域就是變量與函數(shù)的可訪問范圍,即作...
    沐向閱讀 251評論 0 0
  • 任何程序設(shè)計語言都有作用域的概念,簡單的說,作用域就是變量與函數(shù)的可訪問范圍,即作用域控制著變量與函數(shù)的可見性和生...
    Alone灬旅途閱讀 352評論 0 0

友情鏈接更多精彩內(nèi)容