作用域:作用域是乙個識別符號在程式正文中有效的區域
1.函式原型作用域:在函式原型宣告時形式引數的作用範圍就是函式原型作用域,例如:
double area(double radius);
識別符號radius的作用範圍就在函式area形參列表的左右括號之間,在程式的其他地方不能引用這個識別符號,因此識別符號radius的作用域稱作函式原型作用域
2.區域性作用域:函式形參列表中形參的作用域,從形參列表中的生命處開始,到整個函式體結束之處為止 函式體宣告的變數,其作用域從宣告處開始,一直到宣告所在的塊結束的大括號為止 具有區域性作用域的變數也被稱為區域性變數 例如:
3.類作用域:類可以被看成是一組有名成員的集合,類x的成員m具有類作用域,對m的訪問方式有如下3種
(1)如果在x的成員函式中沒有宣告同名的區域性作用域識別符號,那麼在該函式可以直接訪問成員m
(2)通過表示式x.m或者x::m
(3)通過ptr→m這樣的表示式,其中ptr為指向x類的乙個物件的指標
4.命名空間作用域
命名空間的語法形式如下:
namespace 命名空間名
如果需要引用其他命名空間的識別符號,需要使用下面的語法:
命名空間名::識別符號名
例如:namespace somens;
};如果需要引用類名someclass或函式名somefunc,需要使用下面的方式:
somens::someclass obj1; //宣告乙個somens::someclass型的物件 obj 1
為了解決在識別符號前總使用這樣的命名空間限定會顯得過於亢長,可以使用using語句:
using 命名空間名:: 識別符號名
using namespace 命名空間名;
命名空間也允許巢狀,例如:
namespace outerns;}}
作用域例項:
#include
using namespace std;
int i; //在全域性命名空間中的全域性變數
namespace ns int main()
cout << "i = " << i << endl; //輸出5
return 0;
}執行結果:
i = 7
j = 6
i = 5
第一次輸出的結果是7,是因為具有區域性作用域的變數i把具有命名空間作用域的變數i隱藏了,具有命名空間作用域的變數i變得不可見。當程式執行到塊1結束後,進行第二次輸出時,輸出的就是具有命名空間作用域的變數i的值5
變數j也具有命名空間作用域,它被宣告在命名空間ns中,在主函式中通過ns::j的方式引用,為其賦值,接下來在塊1中,通過using namespace ns使得該命名空間的識別符號可以在該塊中被直接引用,因此輸出j時可以直接使用識別符號j
具有命名空間作用域的變數也稱為全域性變數
可見性程式執行到某一點,能夠引用到的識別符號,就是該處可見的識別符號
作用域可見性的一般規則:
識別符號要宣告在前,引用在後
在同一作用域中,不能宣告同名的識別符號
在沒有互相包含關係的不同的作用域中宣告的同名識別符號,互不影響
如果在兩個或多個具有包含關係的作用域中宣告了同名識別符號,則外層識別符號在內層不可見
物件生存期包括靜態生存期和動態生存期
靜態生存期:如果物件的生存期與程式的執行期相同,則稱它具有靜態生存期 在命名空間作用域中宣告的物件都是具有靜態生存期的 如果要在函式內部的區域性作用域中宣告具有靜態生存期的物件,則要使用關鍵字static,例如:static int i;//i是靜態變數
靜態變數的特點是當乙個函式返回後,下一次再呼叫時,該變數還會保持上一回的值,即使發揮了遞迴呼叫,也不會為該變數建立新的副本,該變數會在每次呼叫間共享
在定義靜態變數的同時也可以為它賦初值,例:
static int i = 5;
表示i會被賦予5初始化,而非每次執行函式時都將i賦值為5
動態生存期:除了上述兩種情況,其餘的物件都具有動態生存期 在區域性作用域中宣告的具有動態生存期的物件,習慣上也稱為區域性生存期物件 區域性生存期物件誕生於宣告點,結束於宣告所在的塊執行完畢之時
變數的生存期與可見性
注意:static int a,static int b是靜態區域性變數,定義時未被指定初值的基本型別靜態生存期變數,會被賦予0值初始化
類的靜態成員
模組間對記憶體中資料的共享是通過函式與函式之間的資料共享來實現的
靜態資料成員
乙個類的所有物件具有相同的屬性,是指屬性的個數,名稱,資料型別相同,各個物件的屬性值則可以各不相同,這樣的屬性在物件導向方法中稱為例項屬性
類屬性是描述類的所有物件共同特徵的乙個資料項,對於任何物件例項,它的屬性值是相同的,將模擬作乙個工廠,物件是工廠生產出的產品,那麼靜態成員是存放在工廠中,屬於工廠的,而不是屬於每個產品的
靜態資料成員具有靜態生存期,一般用法是「類名::識別符號」 在uml語言中,靜態資料成員通過在資料成員下方新增下劃線來表示,從下面的例子中可以看到靜態資料成員的作用
例:具有靜態資料成員的point類
資料的共享與保護(一)
1 作用域 指的是識別符號的有效範圍,乙個識別符號在程式正文中有效的區域 c 作用域 1 函式原型作用域 c 程式中最小的作用域 2 區域性作用域 塊作用域 函式形參列表中形參的作用域,從形參列表中的聲名處開始,到整個函式體結束處為止 函式體內宣告的變數,其作用域從宣告開始,直到宣告所在的塊結束的大...
資料共享與保護
作用域 是識別符號的有效範圍 可見性 識別符號是否可以引用的問題 程式執行到某一點。能夠引用到的識別符號,就是該處可見的識別符號。函式原型的作用域 函式原型中的引數,其作用域始於 結束於 例如,設有下列原型宣告 double area double radius radius 的作用域僅在於此,不能...
資料的共享與保護
1.生存期 1 靜態生存期 定義 若物件的生存期與程式的執行期相同,則稱它具有靜態生存期 方式 使用關鍵字static 在命名空間作用域宣告的物件都具有靜態生存期 2 動態生存期 區域性生存期物件誕生於宣告點,結束於宣告所在的塊執行完畢之時。例 變數的生存期與可見性 include using na...