C++關鍵字static

static簡介:

static方法就是沒有this的方法,在static方法內部不能調用非靜態方法,反過來是可以的。而且可以在沒有創建任何對象的前提下,僅僅通過類本身來調用。


面向過程設計中的static

1.修飾靜態全局變量時

特點:

a.該變量在全局數據區分配內存

b.未經初始化的靜態全局變量默認值爲0

c.static修飾的變量整個文件中都是可見的


和全局變量的區別:

a.不能被其他文件使用

b.其他文件中可以定義相同名字的變量,沒有命名衝突              (靜態函數相同)

2.修飾靜態局部變量時

代碼說明:

#include <iostream>
using namespace std;


void func()
{
static int n = 10;
cout << n << endl;
n++;
}
void func1()
{
    int n = 10;
cout << n << endl;
n++;
}
int main()
{
func();
func();
func();
func1();
func1();
func1();


system("pause");
return 0;


}

輸出結果:10,11,12,10,10,10

可以看出:普通局部變量作用域在func函數體內部,內存分配在棧區,函數結束即釋放。

靜態局部變量存放在全局數據區,作用域在整個文件內部。


面對對象設計中的static

1.修飾靜態數據成員時

特點:

a.類創建多個對象時,靜態數據成員在類中只有一份拷貝,只分配一次內存,由該類型的所有對象共享使用

b.靜態數據成員和普通的數據成員一樣遵守public訪問規則

static int sum;聲明靜態數據成員

int MyClass::sum = 0;定義並初始化靜態數據成員(不能在類中初始化)


c.類的靜態數據成員2種訪問形式

1.類對象名.靜態數據成員名            或者        2.類型型名::靜態數據成員名


優點:節省空間,實現共享       

和全局變量相比:1.無命名衝突   2.可以是private屬性,信息隱藏


2.修飾靜態成員函數時

爲類的全部服務而不是爲類的某一個對象服務

因此無this指針,無法訪問非靜態數據成員和函數,反過來可以


特點:

1.類體外的函數定義不能指定關鍵字static

2.訪問權限(。。。。。。。。。。。。。)

3.無this指針,不會產生額外開銷,比全局函數運行速度快


調用方法:<類名>::<靜態成員函數名>(<參數表>)





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章