前言:
本文只是本人對C++中關於靜態類型的一個總結,如錯誤之處,請大家幫我改正。我分兩個方面來總結,第一方面主要是相對於面向過程而言,即在這方面不涉及到類,第二方面相對於面向對象而言,主要說明static在類中的作用。
一、在面向過程設計中的static關鍵字
1、靜態全局變量
定義:在全局變量前,加上關鍵字 static 該變量就被定義成為了一個靜態全局變量。
特點:
A、該變量在全局數據區分配內存。
B、初始化:如果不顯式初始化,那麼將被隱式初始化為0。
C、訪變量只在本源文件可見,嚴格的講應該為定義之處開始到本文件結束。
例(摘於C++程序設計教程---錢能主編P103):
//file1.cpp
#include<iostream.h>
void fn();
extern int n;
void main()
{
n=20;
cout << n << endl;
fn();
}
//file2.cpp
#include<iostream.h>
static int n; //定義靜態全局變量,初始化為0;
void fn()
{
n++;
cout << n << endl;
}
文件分別編譯能通過,但連接時file1.cpp 中的變量n找不到定義,產生連接錯誤。 //file1.cpp
void fn();
void staticFn()
void main()
{
fn();
staticFn();
}
//file2.cpp
#include<iostream.h>
static void staticFn();
void fn();
void fn()
{
staticFn();
cout << "this is fn()
";
}
void staticFn()
{
cout << "this is staticFn()
";
} 連接時,將產生找不到函數staticFn()定義的錯誤。