靜態函式和靜態變數

2021-10-06 16:09:24 字數 1137 閱讀 1143

記憶體大致可以劃分為:

棧區堆區

全域性/靜態區

常量區**區

其中棧區位於高位址,**區位於低位址。

**區:存放程式**段;

常量區:存放各種常量——數值常量和字串常量等;

全域性/靜態區:存放全域性變數和靜態變數,未初始化的和初始化的分開存放;

堆區:使用new就是在該區申請;

棧區:存放區域性變數等;

// a.**件

class a

protect:

private:

int num1; //普通成員變數

static int num2; //靜態變數

}// a.cpp檔案

static int a::num2 = 1; // 靜態成員變數初始化在類外面進行

int a::num2; // static關鍵字可以省略,num2不顯示初始化時則為預設初始值,一般為0

// ps:靜態成員變數的記憶體空間是在初始化時分配的

a::a(int a, int b)

a::~a()

// 普通成員函式一般是不可以在標頭檔案中定義的,只在標頭檔案中宣告,原始檔中定義

// 因為乙個成員函式只能定義一次,而可以宣告多次(標頭檔案被多次包含時)

int a::fuc1()

// 靜態函式也可以在原始檔中定義

int a::fuc2()

// main.cpp

#include "a.h"

int main()

1、普通成員變數一般在類的建構函式中初始化,而靜態變數要在類外初始化;

2、普通成員函式可以訪問所有類的變數,而靜態函式只能訪問靜態變數;

3、普通成員函式一般只在標頭檔案中宣告,在原始檔中定義;而靜態函式可以在標頭檔案中宣告和定義,也可以將定義放在原始檔中;

4、普通成員函式有this指標,而靜態成員函式沒有this指標,所以不能訪問非靜態成員變數;

5、類每構造乙個物件,則每個物件都有各自不同的普通成員變數和函式;但所有物件共享乙個靜態成員變數和函式;

6、普通成員變數和函式隨物件構造而構造,隨物件銷毀而銷毀;但靜態成員變數不隨物件構造和銷毀。

靜態變數和靜態函式

靜態變數 靜態變數使用 static 修飾符進行宣告 在所屬類被裝載時建立 通過類進行訪問 所屬類的所有例項的同一靜態變數都是同乙個值 非靜態變數 不帶有 static 修飾符宣告的變數稱做非靜態變數 在類被例項化時建立 通過物件進行訪問 同乙個類的不同例項的同一非靜態變數可以是不同的值 在c 中,...

c c 靜態變數和靜態函式

c語言中需要記憶體來存放資料。而記憶體主要分為兩類 靜態儲存區和動態儲存區 靜態儲存區分為 唯讀資料 readonly data 區 以讀寫資料 rw data 區 未初始化區 bss 它們都是在程式編譯連線階段確定的,在程式執行的階段不會改變。動態儲存區分為堆和棧。都是程式執行的過程中動態分配的,...

JS靜態變數和靜態函式

function a 在建構函式外定義的都是所有物件共享的 a.id 我是a a.sayid function a.sayid 如上,在建構函式外用函式名定義的屬性或者方法,可以也只可以通過函式名來訪問,這和c 基本一樣。輸出 試圖訪問非靜態變數時 function a 在建構函式外定義的都是所有物...