C 基礎學習 關於C 靜態成員函式和變數

2021-05-28 17:56:43 字數 1298 閱讀 8345

**一:

class point

static void init() };

int main()

**二:

class point

static void init() };

int main()

兩個**編譯執行,**一成功,**二報錯。錯誤資訊:

test1.cpp(16) : errorc2352: 「point::output」: 非靜態成員函式的非法呼叫。

**三:

#include using namespace std;

class point

static void init()

private:

int x,y;

};int main()

執行報錯:

1>e:\學習\程式練習\test1\test1\test1.cpp(11): error c2597: 對非靜態成員「point::x」的非法引用

1>e:\學習\程式練習\test1\test1\test1.cpp(12): error c2597: 對非靜態成員「point::y」的非法引用

在靜態成員函式中非法引用point物件的x和y資料成員。因為init是靜態函式,不屬於某個具體的物件,也就是說在還沒有產生point類的任乙個具體的物件時,該函式就已經存在於程式的**區了。但是,point類的資料成員x和y還沒有分配記憶體空間,這樣,在init函式中對他們進行賦值操作會失敗。也就是說,在靜態成員函式中不能呼叫非靜態成員,包括非靜態成員函式和非靜態成員變數。靜態成員函式只能訪問靜態成員變數。

如果把上述**中對x、y的賦值操作放在非靜態函式中,就會成功。

但是,在非靜態成員函式中可以呼叫靜態成員函式。

我們可以在上述**中,將point類的資料成員x和y的定義之前加上static限定符,使他們成為靜態成員變數。

staticintx,y;

編譯執行,程式報錯。錯誤資訊:

1>test1.obj: error lnk2001: 無法解析的外部符號"private:static int point::y" (?y@point@@0ha)

1>test1.obj: error lnk2001: 無法解析的外部符號"private:static int point::x" (?x@point@@0ha)

intpoint::x = 0;

intpoint::y = 0;

則執行成功。

c 學習靜態資料成員與靜態成員函式

此次主要想要學習靜態資料成員與靜態成員函式 靜態是以static進行宣告 其是屬於類而不屬於物件 即乙個類只會對靜態分配乙個儲存空間,無論建立n個物件,靜態成員的儲存只會有乙個,而其他非靜態成員會有n個 靜態成員必須在類外進行初始化 例如我這次忘記定義 int student total 0 系統一...

C 靜態成員函式

檔名稱 exp 1.cpp 作 者 顧韌達 完成日期 2016 年 4 月 22日 版 本 號 v1.0 對任務及求解方法的描述部分 靜態成員應用 輸入描述 無 問題描述 設計含有靜態資料成員和成員函式的time類。靜態資料成員是類中所有的物件共有的資料,在下面的設計中,時鐘要採用12小時制,還是要...

C 靜態成員變數,靜態成員函式

資料成員可以分靜態變數 非靜態變數兩種.靜態成員 靜態類中的成員加入static修飾符,即是靜態成員.可以直接使用類名 靜態成員名訪問此靜態成員,因為靜態成員存在於記憶體,非靜態成員需要例項化才會分配記憶體,所以靜態成員不能訪問非靜態的成員.因為靜態成員存在於記憶體,所以非靜態成員可以直接訪問類中靜...