**一:
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修飾符,即是靜態成員.可以直接使用類名 靜態成員名訪問此靜態成員,因為靜態成員存在於記憶體,非靜態成員需要例項化才會分配記憶體,所以靜態成員不能訪問非靜態的成員.因為靜態成員存在於記憶體,所以非靜態成員可以直接訪問類中靜...