例1 孫鑫視頻學(xué)習(xí) Oct.27th 2009 Skyseraph
成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)介紹好的網(wǎng)站是理念、設(shè)計和技術(shù)的結(jié)合。創(chuàng)新互聯(lián)擁有的網(wǎng)站設(shè)計理念、多方位的設(shè)計風(fēng)格、經(jīng)驗豐富的設(shè)計團(tuán)隊。提供PC端+手機(jī)端網(wǎng)站建設(shè),用營銷思維進(jìn)行網(wǎng)站設(shè)計、采用先進(jìn)技術(shù)開源代碼、注重用戶體驗與SEO基礎(chǔ),將技術(shù)與創(chuàng)意整合到網(wǎng)站之中,以契合客戶的方式做到創(chuàng)意性的視覺化效果。
例子1.0
#include "iostream"
class Point
{
public:
void output() {}
static void init() {} //靜態(tài)函數(shù),不屬于某個具體的對象,即在未產(chǎn)生Point任何對象時,這個類已經(jīng)存在于程序的代碼區(qū)
}
void main()
{
/*法一
Point pt; //構(gòu)造對象
pt.init();
pt.output();
*/
//法二
Point::init();/
Point::output();//錯誤
}
說明:法一正確;法二執(zhí)行錯誤,原因:
//靜態(tài)成員函數(shù)和靜態(tài)成員變量屬于類本身,在類加載的時候,即為它們分配了空間,故可以用類名::函數(shù)名或類名:變量名來訪問;
//而非靜態(tài)成員函數(shù)和非靜態(tài)成員屬于對象的方法和數(shù)據(jù),也就是應(yīng)該先產(chǎn)生類的對象,然后通過類的對象去引用。
修改1.1:
class Point
{
public:
void output() {}
static void init() {x=0;y=0;}
private:
int x,y;
}
void main()
{ Point::init();//錯誤:在靜態(tài)成員函數(shù)中不能調(diào)用非靜態(tài)成員
}
說明:在靜態(tài)成員函數(shù)中不能調(diào)用非靜態(tài)成員(靜態(tài)成員函數(shù)和靜態(tài)成員變量);反之在非靜態(tài)成員函數(shù)中可以調(diào)用靜態(tài)成員,可以在修改void output(){ init(); };檢驗
內(nèi)存模型:無論采取什么樣的操作,程序代碼都是在內(nèi)存中執(zhí)行的,只有在內(nèi)存中占有一席之地,我們才能訪問它。
修改1.2
在int x,y;前加static,編譯無錯,鏈接時出錯
說明:對于靜態(tài)成員變量,必須對其進(jìn)行初始化,且必須在類外進(jìn)行此操作
加上: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:非靜態(tài)成員函數(shù)中可以調(diào)用靜態(tài)數(shù)據(jù)成員
cout<<"I am not a static member function!"<<endl;
}
static void output2()
{
//y1 =0; //知識點6:靜態(tài)成員函數(shù)中不可以調(diào)用非靜態(tài)數(shù)據(jù)成員
//y2 =0; //知識點2:靜態(tài)數(shù)據(jù)成員必須初始化,且必須在類外初始化
cout<<"I am a static member function"<<endl;
}
//void output3(int data=x1) {} //知識點5:靜態(tài)數(shù)據(jù)成員可以作為成員函數(shù)的默認(rèn)參數(shù),而非靜態(tài)成員函數(shù)不可以
void output4(int data=x2){}
//static void output() const; //知識點9:靜態(tài)成員函數(shù)不能使用const關(guān)鍵字
//point a1;
static point a2; //知識點4:在定義類成員時,靜態(tài)數(shù)據(jù)成員允許定義類的所屬對象,非靜態(tài)數(shù)據(jù)成員只能是當(dāng)前類的指針或引用類型
point *a3;
public:
int y1; //y1=0 基礎(chǔ):不能直接對類的數(shù)據(jù)成員初始化
static int y2;
private:
int x1;
static x2;
};
int point::x2=1; //知識點2:靜態(tài)數(shù)據(jù)成員必須初始化,且必須在類外初始化
int point::y2=1;
/* //問題:加上這段,編譯始終不能通過,不知什么地方出現(xiàn)了問題,待議~
void output2() //基礎(chǔ):對于方法/類的成員函數(shù) 的定義可以放在類中或者類外
//知識點8:在定義靜態(tài)成員函數(shù)時,如果是在類外實現(xiàn),那么不能再加static關(guān)鍵字
{
//y1 =0; //知識點6:靜態(tài)成員函數(shù)中不可以調(diào)用非靜態(tài)數(shù)據(jù)成員
//y2 =0; //知識點2:靜態(tài)數(shù)據(jù)成員必須初始化,且必須在類外初始化
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; //基礎(chǔ): 待議~~
c->output1();
c->output2();
cout<<"通過類名直接訪問"<<endl;
//point::output1(); //知識點1:靜態(tài)成員用類名或?qū)ο笤L問,非靜態(tài)成員用對象訪問 //錯誤
point::output2();
//cout<<a.x1<<endl; //基礎(chǔ):訪問私有類 //錯誤
cout<<a.y2<<endl; //知識點3:類的靜態(tài)數(shù)據(jù)成員被所有類的對象共享
//cout<<b.x1<<endl;
cout<<b.y2<<endl;
return -1;
}
分享標(biāo)題:【C/C++語法外功】類的靜態(tài)成員理解
文章出自:http://vcdvsql.cn/article38/jhjppp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、App開發(fā)、營銷型網(wǎng)站建設(shè)、全網(wǎng)營銷推廣、標(biāo)簽優(yōu)化、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)