C 學習之資料的共享與保護

2021-09-12 03:10:25 字數 3478 閱讀 7305

作用域是乙個識別符號在程式正文中有效的區域。

作用域分類:

1、函式原型作用域

2、區域性作用域(塊作用域)

3、類作用域。

4、檔案作用域。

5、命名空間作用域(後面會學習)

函式原型中的引數,其作用域始於"(",結束於")"。

例如:

double area(double radius);
函式的形參、在塊中宣告的識別符號。

其作用域自宣告處起,限於塊中

例如:

void fun(int a) 

}

類的成員具有類作用域,其範圍包括類體非內聯成員函式的函式體。

如果在類作用域以外訪問類的成員,要通過類名(訪問靜態成員),或者該類的物件名、物件引用、物件指標(訪問非靜態成員)。

不在前述各個作用域**現的宣告,就具有檔案作用域,這樣宣告的識別符號其作用域開始於宣告點,結束於檔案尾。

可見性是從對識別符號的引用的角度來談的概念。

可見性表示從內層作用域向外層作用域「看」時能看見什麼。

如果標識在某處可見,就可以在該處引用此識別符號。

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

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

例如:

//5_1.cpp

#include

using namespace std;

int i; //全域性變數,檔案作用域

int main()

cout << 「i = 」 << i << endl;//輸出5

return 0;

}

靜態生存期:

1、這種生存期與程式的執行期相同。

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

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

動態生存期:

塊作用域中宣告的,沒有用static修飾的物件是動態生存期的物件(習慣稱區域性生存期物件)。

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

例如:

#includeusing namespace std;

int i = 1; // i 為全域性變數,具有靜態生存期。

void other()

point(point &p)

~point()

int getx()

int gety()

void showcount()

private: //私有資料成員

int x, y;

static int count; //靜態資料成員宣告,用於記錄點的個數

};int point::count = 0;//靜態資料成員定義和初始化,使用類名限定

int main()

程式的執行結果是:

point a: 4, 5  object count=1

point b: 4, 5  object count=2

類外**可以使用類名作用域操作符來呼叫靜態成員函式。

靜態成員函式主要用於處理該類的靜態資料成員,可以直接呼叫靜態成員函式

如果訪問非靜態成員,要通過物件來訪問。

例如:具有靜態資料、函式成員的point類:

class point //建構函式

point(point &p)

~point()

int getx()

int gety()

static void showcount()

private:

int x, y;

static int count; //靜態資料成員宣告,用於記錄點的個數

};int point::count = 0;//靜態資料成員定義和初始化,使用類名限定

int main()

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

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

可以使用友元函式友元類

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

友元函式:

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

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

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

例如:利用友元函式計算兩點之間的距離

#include #include using namespace std;

class point

int getx()

int gety()

friend float dist(point &a, point &b);

private: //私有資料成員

int x, y;

};float dist( point& a, point& b)

int main()

友元類:

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

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

例如:

class a 

private:

int x;

};class b ;

void b::set(int i)

void b::display() ;

類的友元關係是單向的:

如果宣告b類是a類的友元,b類的成員函式就可以訪問a類的私有和保護資料,但a類的成員函式卻不能訪問b類的私有、保護資料。

C 學習之共享資料的保護

對於既需要共享 又需要防止改變的資料應該宣告為常型別 用const進行修飾 對於不改變物件狀態的成員函式應該宣告為常函式。1 常物件 必須進行初始化,不能被更新。const 類名 物件名 2 常成員 用const進行修飾的類成員 常資料成員和常函式成員 3 常引用 被引用的物件不能被更新。const...

資料共享與保護

作用域 是識別符號的有效範圍 可見性 識別符號是否可以引用的問題 程式執行到某一點。能夠引用到的識別符號,就是該處可見的識別符號。函式原型的作用域 函式原型中的引數,其作用域始於 結束於 例如,設有下列原型宣告 double area double radius radius 的作用域僅在於此,不能...

資料的共享與保護

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