C++static關(guān)鍵字

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");
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容