靜態成員問題

2021-06-13 07:37:36 字數 1074 閱讀 8055

#includeclass point

static void output() };

void main()

如果把主函式中**改為

/*

point po;

po.init();

po.output();

*/ point::init();

point::output();

就會出現以下錯誤:

error c2352: 'point::init' : illegal call of non-static member function

因為對於init()函式來說,它是point類中的乙個內部成員,當要訪問內部成員的時候,就必須先

在記憶體中用了乙個實實在在的存在乙個空間後,才能呼叫你這個內在當中的乙個方法。

然而為什麼point::output();能夠實現呢?

output()其前加了乙個static,作為一種靜態的方法,它就不屬於乙個類的物件,而是屬於類本身,進而載入後,已經為其

分配了**區了,也就是說其並不屬於某一具體的物件,只屬於乙個類。在乙個物件沒有

產生時,output()就已經有了**區。

如果在output()中新增兩個成員變數會怎樣?

error c2597: illegal reference to data member 'point::x' in a static member fu

error c2597: illegal reference to data member 'point::y' in a static member function

在乙個靜態函式中去呼叫非靜態成員變數,因為x, y 並沒有分配作保的記憶體空間,賦值操作就不能成功。

但非靜態的成員函式可以引用靜態的

而靜態成員函式只能引用靜成員,可改x   y 為靜態成員!

總結:誰能引用誰,應從內在模型中去考慮,也就是說不管你要採取什麼樣的操作

我們的程式**都是在記憶體中的,這樣才能去呼叫它,訪問它,如其根本就沒有存在 於

記憶體當中 ,也就產生一系列的操作了。

靜態成員 靜態成員函式

reference to non static member function must be called sort numbers.begin numbers.end cmp 做演算法題的時候遇到的乙個問題,和成員函式相關,這裡記錄一下備忘。首先上 class solution string p...

靜態成員變數修改問題

先看一段 student類 public class student public student string name,int age,string country 成員方法 public void show 測試類 public class test2 輸出結果 小哀,20,中國 小蘭,19,...

靜態成員和非靜態成員

類中的成員要麼是靜態的要麼是非靜態的。一般來說,靜態成員都歸屬於類所有,使用 static 關鍵字來宣告,不能在類的例項中訪問靜態成員 非靜態成員屬於類的例項 物件所有,不能按照類訪問靜態成員來訪問。下面用乙個例項來幫助理解 using system using system.collections...