記憶體大致可以劃分為:
棧區堆區
全域性/靜態區
常量區**區
其中棧區位於高位址,**區位於低位址。
**區:存放程式**段;
常量區:存放各種常量——數值常量和字串常量等;
全域性/靜態區:存放全域性變數和靜態變數,未初始化的和初始化的分開存放;
堆區:使用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 在建構函式外定義的都是所有物...