識別符號應宣告在前,引用在後.
如果某個識別符號在外層中宣告,且在內層中沒有同一識別符號的宣告,則該識別符號在內層可見.對於兩個巢狀的作用域,如果在內層作用域內宣告了與外層同名的則在內層不可見.
#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 之變數的作用域,生存期,可見性
作用域是表示某個識別符號在什麼範圍內有效 可見性是指識別符號是否可見,可引用 生存期,是指程式中的簡單變數和類的物件,它們同自然界中的萬物一樣。也有自己的產生和消亡的生存期,變數和物件的生存期包含靜態生存期和動態生存期。具有靜態生存期的變數和物件,它們的生存期和程式執行相同 除了具有靜態生存期的變數...