資料共享與保護

2021-08-04 14:10:21 字數 3484 閱讀 6602

作用域:是識別符號的有效範圍;

可見性:識別符號是否可以引用的問題

程式執行到某一點。能夠引用到的識別符號,就是該處可見的識別符號。

函式原型的作用域:

函式原型中的引數,其作用域始於

"(",結束於

")"。

例如,設有下列原型宣告:

double area(double radius);(radius 的作用域僅在於此,不能用於程式正文其它地方)

²塊是一對花括號括起來的一段程式單元。

²在塊中宣告的識別符號,其作用域從宣告處開始,直到塊結束的右花括號。

作用域可見性的一般規律:

v 識別符號應宣告在先,引用在後。

v 在同一作用域中,不能宣告同名的識別符號。

v 如果某個識別符號在外層中宣告,且在內層中沒有同一識別符號的宣告,則該識別符號在內層可見。

v 對於兩個巢狀的作用域,如果在內層作用域內宣告了與外層作用域中同名的識別符號,則外層作用域的 識別符號在內層不可見。

物件的生存期:物件從產生到結束的這段時間就是它的生存期。

靜態生存期:

v 靜態物件生存期與程式的執行期相同。

v 在檔案作用域中宣告的物件具有這種生存期。

v 在函式內部宣告靜態生存期物件,要冠以關鍵字static 。

例:static int i;

動態生存期:

v 塊作用域中宣告的物件是動態生存期的物件(習慣稱區域性生存期物件)。

v 開始於程式執行到宣告點時,結束於命名該識別符號的作用域結束處。

具有靜態、動態生存期物件的時鐘程式:

#include

class clock //時鐘類宣告

private: //私有資料成員

int hour,minute,second;

//時鐘類成員函式實現

clock::clock( ) //建構函式

{ hour=0;

minute=0;

second=0;

void clock::settime(int newh, int newm, int news)

{ hour=newh;

minute=newm;

second=news;

void clock::showtime( )

{ coutglobclock,

//具有靜態生存期,檔案作用域

void main( ) //主函式

cout<<"first time output:"globclock:

globclock.showtime( )

; //

物件的成員函式具有類作用域

globclock.settime(8,30,30);

clock myclock(globclock);

//宣告具有塊作用域的物件

myclock

cout<<"second time output:"//引用具有塊作用域的物件

myclock

前面介紹了很多關於c++的概念性的問題,並沒有列舉例子,我個人感覺如果不把基本感念搞懂例子給了也很難理解,**是考驗你對基本概念的理解程度。這個是個比較經典的乙個是時鐘問題,也算是對前面的知識的總結。

讀者可以思考乙個問題,如果你創捷的這個物件的初始化是有你自己設定的,也就是在程式中增加輸入這一功能,該如何實現。

靜態資料成員:

v 乙個類的所有物件具有相同的屬性。

v 類屬性:描述類的所有物件的共同特徵的乙個資料項,對於任何物件例項。它的屬性值是相同的

v 靜態資料成員

n 用關鍵字static宣告

n 該類的所有物件維護該成員的同乙個拷貝

n 必須在類外定義和初始化,用(::)來指明所屬的類。

v靜態成員屬於類,非靜態成員屬於物件。

v靜態成員函式只能引用屬於該類的靜態資料成員或靜態成員函式。

友元:

v 友元是c++提供的一種破壞資料封裝和資料隱藏的機制。

v 通過將乙個模組宣告為另乙個模組的友元,乙個模組能夠引用到另乙個模組中本是被隱藏的資訊。

v 可以使用友元函式和友元類。

v 為了確保資料的完整性,及資料封裝與隱藏的原則,建議盡量不使用或少使用友元。

友元函式:

友元函式是在類宣告中由關鍵字friend修飾說明的非成員函式,在它的函式體中能夠通過物件名訪問

private

和 protected成員

作用:增加靈活性,使程式設計師可以在封裝和快速性方面做合理選擇。

訪問物件中的成員必須通過物件名。

友元成員函式:

乙個類的成員函式可以是另乙個類的友元

即:乙個類的成員函式可以說明為另乙個類的

友元函式,以便通過該成員函式訪問另 乙個類中的成員。

友元類:

v 若乙個類為另乙個類的友元,則此類的所有成員都能訪問對方類的私有成員。

v 宣告語法:將友元類名在另乙個類中使用friend修飾說明。

注意:

一、友元關係是不能傳遞的

二、友元關係是單向的

常型別:

ø常型別的物件必須進行初始化,而且不能被更新。

v常引用:被引用的物件不能被更新。

nconst  型別說明符  

&引用名

v常物件:必須進行初始化,不能被更新。

n類名  const  物件名

v常陣列:陣列元素不能被更新(下一章介紹

)。

n型別說明符  const  陣列名[大小

]...

v常指標:指向常量的指標

多檔案結構:

l 乙個源程式一般至少分為三個原始檔:

類宣告檔案(.h檔案)

類實現檔案(.cpp檔案)

類的使用檔案(main( )所在的

.cpp

檔案)

l 利用工程來組合各個檔案。

資料的共享與保護

1.生存期 1 靜態生存期 定義 若物件的生存期與程式的執行期相同,則稱它具有靜態生存期 方式 使用關鍵字static 在命名空間作用域宣告的物件都具有靜態生存期 2 動態生存期 區域性生存期物件誕生於宣告點,結束於宣告所在的塊執行完畢之時。例 變數的生存期與可見性 include using na...

C C 資料的共享與保護

當程式中遇到常量時 如果程式複雜,用到的常量比較多的化,不能很簡單的看出某個常量時用來做什麼的。在實際中應該盡量避免產生這種magic number,可以使用c語言提供的預定義功能 define pi 3.14 auto f double radius 預定義有自己的侷限 比如不能進行型別檢查 更好...

資料的共享與保護(一)

1 作用域 指的是識別符號的有效範圍,乙個識別符號在程式正文中有效的區域 c 作用域 1 函式原型作用域 c 程式中最小的作用域 2 區域性作用域 塊作用域 函式形參列表中形參的作用域,從形參列表中的聲名處開始,到整個函式體結束處為止 函式體內宣告的變數,其作用域從宣告開始,直到宣告所在的塊結束的大...