中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

【C/C++語法外功】類的靜態成員理解

發布時間:2020-07-26 19:39:16 來源:網絡 閱讀:648 作者:鄒君安 欄目:編程語言

例1  孫鑫視頻學習  Oct.27th 2009  Skyseraph

例子1.0

#include "iostream"

class Point

{

public:

void output() {}

static void init() {}  //靜態函數,不屬于某個具體的對象,即在未產生Point任何對象時,這個類已經存在于程序的代碼區

}

 

void main()

{

/*法一

Point pt; //構造對象

pt.init();

pt.output();

*/

//法二

Point::init();/

Point::output();//錯誤

}

說明:法一正確;法二執行錯誤,原因:

//靜態成員函數和靜態成員變量屬于類本身,在類加載的時候,即為它們分配了空間,故可以用類名::函數名或類名:變量名來訪問;

//而非靜態成員函數和非靜態成員屬于對象的方法和數據,也就是應該先產生類的對象,然后通過類的對象去引用。

 

修改1.1:

class Point

{

public:

void output() {}

static void init() {x=0;y=0;}

private:

int x,y;

}

void main()

{ Point::init();//錯誤:在靜態成員函數中不能調用非靜態成員

 }

說明:在靜態成員函數中不能調用非靜態成員(靜態成員函數和靜態成員變量);反之在非靜態成員函數中可以調用靜態成員,可以在修改void output(){ init(); };檢驗

內存模型:無論采取什么樣的操作,程序代碼都是在內存中執行的,只有在內存中占有一席之地,我們才能訪問它。

 

 

修改1.2

在int x,y;前加static,編譯無錯,鏈接時出錯

說明:對于靜態成員變量,必須對其進行初始化,且必須在類外進行此操作

加上:int Point::x=0;int Point::y=0;   OK!

 

 

 

例2  自編小程序   再次理解static  Oct28th 2010 skyseraph

#include "iostream"

using namespace std;

class point

{

public:

void point::output1() 

{

x1 =0;                                

x2 =0;                                        //知識點7:非靜態成員函數中可以調用靜態數據成員

cout<<"I am not a static member function!"<<endl;

}

static void output2()

{

//y1 =0;                                //知識點6:靜態成員函數中不可以調用非靜態數據成員

//y2 =0;                                //知識點2:靜態數據成員必須初始化,且必須在類外初始化

cout<<"I am a static member function"<<endl;

}

//void output3(int data=x1) {} //知識點5:靜態數據成員可以作為成員函數的默認參數,而非靜態成員函數不可以

void output4(int data=x2){}

//static void output() const;  //知識點9:靜態成員函數不能使用const關鍵字

//point a1;

static point a2; //知識點4:在定義類成員時,靜態數據成員允許定義類的所屬對象,非靜態數據成員只能是當前類的指針或引用類型

point *a3;

public:

int y1; //y1=0  基礎:不能直接對類的數據成員初始化

static int y2;

private:

int x1;

static x2;

};

int point::x2=1;                                //知識點2:靜態數據成員必須初始化,且必須在類外初始化

int point::y2=1;

/* //問題:加上這段,編譯始終不能通過,不知什么地方出現了問題,待議~

void output2()   //基礎:對于方法/類的成員函數 的定義可以放在類中或者類外

//知識點8:在定義靜態成員函數時,如果是在類外實現,那么不能再加static關鍵字

{

//y1 =0;                                //知識點6:靜態成員函數中不可以調用非靜態數據成員

//y2 =0;                                //知識點2:靜態數據成員必須初始化,且必須在類外初始化

cout<<"I am a static member function"<<endl;

}*/

int main(char argc,char** argv)

{

cout<<"通過對象訪問"<<endl;

point a,b;

a.output1();

a.output2();

point*c; //基礎: 待議~~

c->output1();

c->output2();

cout<<"通過類名直接訪問"<<endl;

//point::output1();                        //知識點1:靜態成員用類名或對象訪問,非靜態成員用對象訪問 //錯誤

point::output2();

//cout<<a.x1<<endl; //基礎:訪問私有類  //錯誤

cout<<a.y2<<endl;   //知識點3:類的靜態數據成員被所有類的對象共享

//cout<<b.x1<<endl;

cout<<b.y2<<endl;

return -1;

}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丽水市| 民和| 秀山| 云浮市| 凤山县| 哈尔滨市| 呼图壁县| 增城市| 永定县| 云浮市| 政和县| 遂宁市| 牙克石市| 含山县| 金堂县| 麦盖提县| 宁安市| 如皋市| 全南县| 上虞市| 宁海县| 兴隆县| 抚顺县| 临沂市| 怀仁县| 酒泉市| 孟津县| 绍兴市| 通海县| 双牌县| 佛学| 石首市| 宜丰县| 清原| 寿宁县| 徐水县| 龙口市| 城步| 庄河市| 孟津县| 潍坊市|