第七講 作用域 可見性 生存期 全域性物件

2021-08-10 22:53:46 字數 3401 閱讀 9786

識別符號應宣告在前,引用在後.

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

#include 

using

namespace

std;

int i; //在全域性命名空間中的全域性變數

namespace ns

int main()

cout

<< "i = "

<< i << endl; //輸出5

return

0;}

-靜態生存期

生存期與程式的執行期相同

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

在函式內部宣告靜態生存期對吸納該,要冠以關鍵字static.

#include

using

namespace

std;

int i = 5; //檔案作用域

int main()

i具有靜態生存期

#include 

using

namespace

std;

void fun();

int main()

void fun()

執行結果:

---main---

i: 1 a: 0 b: -10 c: 0

---other---

i: 33 a: 4 b: 0 c: 15

---main---

i: 33 a: 0 b: -10 c: 8

---other---

i: 75 a: 6 b: 4 c: 15

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

#include

using

namespace

std;

class clock ;

clock::clock() : hour(0), minute(0), second(0) //建構函式

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

void clock::showtime()

clock globclock;//宣告物件globclock,

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

int main()

程式的執行結果為:

first time output:

0:0:0

second time output:

8:30:30

#include

using

namespace

std;

int global;

void f()

void g()

int main()

#include

using

namespace

std;

public:

void f();

void g();

private:

int global;

}; global = 5;

} cout

<< global << endl;

}int main()

說明:

1)在為物件分配空間時,不分配靜態資料成員的空間,因為它不屬於任何物件。只要類中定義了靜態資料成員,即使不定義物件,編譯系統也要為靜態資料成員開闢記憶體空間。

2)靜態資料成員不隨物件的建立而分配空間,也不隨物件的撤消而釋放空間,其值被保留。靜態資料成員在程式被編譯時就分配了空間,在程式結束時,才釋放空間。

3)靜態資料成員可以被初始化,但只能在類體之外初始化,格式: 資料型別 類名::靜態資料成員名 = 初值;

4)不能用引數初始化表對靜態資料成員初始化,例如:

box(int h,int w,int len): height(h) //錯誤

2、靜態成員函式

在類的定義中,成員函式前加 static 限定詞,該成員函式就成為靜態成員函式。例:

static int volume( );

用途:靜態成員函式的作用不是為了物件之間的溝通,主要是為了引用本類中的靜態資料成員。它可以直接引用本類的靜態資料成員。

靜態成員函式與普通成員函式的區別:靜態成員函式沒有 this 指標,所以靜態成員函式不能訪問本類中的非靜態資料成員。

例如具有靜態資料成員的 point類

#include 

using namespace std;

class

point

point

(point &p);

int getx()

int gety()

void showcount()

private:

int x,y;

static int count;

};point::point

(point &p)

int point::count=0;

int main()

靜態成員函式舉例

#include 

using

namespace

std;

public:

static

void f();

static

void g();

private:

static

int global;

}; global=5;

} cout

<< global << endl;

}int main()

class a ;

void a::f(a a)

#include 

using namespace std;

class

point

point(point &p);

~point()

int getx()

int gety()

static

void showcount()

private: //私有資料成員

int x, y;

static

intcount; //靜態資料成員宣告

};point::point(point &p)

int point::count=0;

int main()

note C 作用域 可見性與生存期

作用域是乙個識別符號 變數 常量 函式等 在程式正文中有效的區域。函式原型作用域 區域性作用域 塊作用域 類作用域 全域性作用域 檔案作用域 命名空間作用域。即參數列。函式原型中的引數,其作用域始於 結束於 例 double area double radius 區域性作用域舉例 void fun ...

c 變數的作用域 生存期和可見性

範圍 在乙個函式內部定義的變數,作用範圍只限於本函式體內。生存期 程式執行到本函式才會給區域性變數分配記憶體單元,函式執行完畢區域性變數所佔的儲存單元就被釋放 在函式體外部定義的變數是全域性變數,可以被本檔案所有其他函式訪問使用。作用域 所有檔案。在乙個cpp定義的全域性變數在另乙個cpp中使用,應...

C 之變數的作用域,生存期,可見性

作用域是表示某個識別符號在什麼範圍內有效 可見性是指識別符號是否可見,可引用 生存期,是指程式中的簡單變數和類的物件,它們同自然界中的萬物一樣。也有自己的產生和消亡的生存期,變數和物件的生存期包含靜態生存期和動態生存期。具有靜態生存期的變數和物件,它們的生存期和程式執行相同 除了具有靜態生存期的變數...