1、將外部鏈接性的全局變量的鏈接性限制為內(nèi)部。大家都知道,在函數(shù)外面聲明的變量不僅可以在本文件中使用,也可以在其他文件中使用。那么如果我想聲明一個變量,只想在本文件的各個函數(shù)中使用,不想與其他文件產(chǎn)生關(guān)系,那怎么辦?用static修飾它就好了,如下:
//A.c文件
int a;//具有外部鏈接的靜態(tài)變量,意思就是在其他文件(B,C,D)中也可以使用
static int b;//具有內(nèi)部鏈接的靜態(tài)變量,只可以在文件A中使用
int mian()
{
//一些代碼
}
2、修飾函數(shù)中的變量,具體過程如下:
#include<iostream>
int count()
{
static int num = 0;//加了static關(guān)鍵字后,num保留上一次的值
num++;
return num;
}
int main()
{
int a;
for (int i = 0; i < 10; i++)
{
count();//調(diào)用10次count函數(shù)
}
a = count();
std::cout << a << std::endl;
system("pause");
return 0;
}
//結(jié)果顯示a=11,證明最后一次調(diào)用時a的初始值為10,10++之后為11
//若不用static關(guān)鍵字修飾num,那么每次調(diào)用count函數(shù)都會把num賦值為0
//加了static關(guān)鍵字之后,只有第一次調(diào)用count函數(shù)時才會給num賦值,以后再調(diào)用count函數(shù),num就用上一次保留的值
3、修飾函數(shù)。默認情況下,在一個文件中定義的函數(shù),在其他文件中都可以調(diào)用。那么我想定義一個只能被本文件中的函數(shù)調(diào)用,而其它文件不能調(diào)用的函數(shù),怎么辦?用static修飾它,如下:
//A.cpp
static int function1()//定義
{
//一些代碼
}
void function2()
{
function1();//function2可以調(diào)用function1,因為它們在同一個文件中
}
//B.cpp
static int function1();
void function2();
void function3()
{
function1();//不OK,function1只能在文件A中用,B文件不能用
function2();//OK,function2沒有被static修飾,所以可以在文件B中用
}
4、static修飾類中的變量,如下:
//A.h
#pragma once
class ClassA {
private:
static int num;//所有的成員共用同一個num
public:
ClassA();//構(gòu)造函數(shù)
int getnum() const;//返回num的值
};
//A.cpp
#include"A.h"
int ClassA::num = 0;//注意在這里初始化類中的靜態(tài)變量,而不是在頭文件中初始化
ClassA::ClassA()
{
this->num++;
}
int ClassA::getnum() const
{
return (this->num);
}
//test.cpp
#include<iostream>
#include"A.h"
using namespace std;
int main()
{
ClassA a;
ClassA b;
ClassA c;
cout << "num = " << a.getnum() << endl;
system("pause");
}
//結(jié)果 num = 3,說明每創(chuàng)建一個對象,static int num就+1,說明所有對象共用一個static int num
5、static修飾類中的函數(shù)
#include<iostream>
using namespace std;
class ClassA {
public:
static void function1();
void function2();
};
void ClassA::function1()//靜態(tài)函數(shù)若要訪問類中的數(shù)據(jù)的話,只能訪問靜態(tài)數(shù)據(jù)
{ //本函數(shù)中沒有訪問數(shù)據(jù),不能演示了
cout << "function1" << endl;
}
void ClassA::function2()
{
cout << "function2" << endl;
}
int main()
{
ClassA::function1();//OK
ClassA::function2();//不OK,必須通過對象調(diào)用function2
system("pause");
}