class內(nèi)部處理

class A  
{  
public:  
    int foo( )  {    return  val ;    }  
    static int staFun( )  {     return  staVal ;  }  
    static int staVal ;  
private:  
    int val ;  
    char bit1 ;  
} ;  
  
class B : public A  
{  
public:  
    char foo( )  {    return  bit2;    }  
private:  
    char bit2 ;  
};

class內(nèi)部處理

為淄川等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及淄川網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、淄川網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

class內(nèi)部處理

靜態(tài)數(shù)據(jù)成員:

它被編譯器提出于class之外,并被視為一個(gè)global變量(但只在class生命范圍之內(nèi)可見(jiàn))

每個(gè)靜態(tài)數(shù)據(jù)成員只有一個(gè)實(shí)體,存放在程序的數(shù)據(jù)段之中,

經(jīng)由’.’運(yùn)算符,對(duì)一個(gè)靜態(tài)數(shù)據(jù)成員進(jìn)行存取操作,只是語(yǔ)法上的一種便宜行事而已。靜態(tài)數(shù)據(jù)成員其實(shí)并不在class object之中,因此存取它并不需要通過(guò)class object。

 

雖然你可以不靠class object 來(lái)存取一個(gè)靜態(tài)成員,但其存取函數(shù)卻得綁定于一個(gè)class object之上。(若靜態(tài)成員的訪問(wèn)控制為protected或private,則必須通過(guò)存取函數(shù)來(lái)訪問(wèn))

 

【注意:】類(lèi)的靜態(tài)數(shù)據(jù)成員,必須要在全局下進(jìn)行定義,然后才能使用。

無(wú)論它的訪問(wèn)控制是什么,必須在main函數(shù)之前,對(duì)靜態(tài)數(shù)據(jù)成員定義。

例如:int A::staVal = 0 ;

否則,編譯器會(huì)報(bào)錯(cuò):未定義的引用。

因?yàn)榫幾g器把涉及靜態(tài)數(shù)據(jù)成員的使用,都轉(zhuǎn)換為直接使用,而靜態(tài)成員在class中聲明,外部無(wú)法看見(jiàn)。故需要在外部進(jìn)行定義,使其后的代碼可見(jiàn)。

 

成員函數(shù)的處理:

C++的設(shè)計(jì)準(zhǔn)則之一:非靜態(tài)成員函數(shù)至少和一般的外部函數(shù)有相同的存儲(chǔ)效率。

C++編譯器會(huì)把成員函數(shù)內(nèi)化為一般的函數(shù):

①改寫(xiě)函數(shù)原型,安插一個(gè)額外的參數(shù)this指針。用以提供一個(gè)存取管道,使類(lèi)對(duì)象得以調(diào)用該函數(shù)。

int A::foo (A* const this)

若該成員函數(shù)是const,則變成:

int A::foo (const A* const this)

②對(duì)函數(shù)體中 類(lèi)對(duì)象的非靜態(tài)數(shù)據(jù)成員的存取操作,改為經(jīng)由this指針來(lái)存取。

int A::foo (A* const this)

{            return  this->val ;             }

③將成員函數(shù)重新寫(xiě)成一個(gè)外部函數(shù),對(duì)函數(shù)名稱(chēng)進(jìn)行處理,使它在程序中成為獨(dú)一無(wú)二的。

 

以上的轉(zhuǎn)換操作結(jié)束之后,每個(gè)調(diào)用操作都要轉(zhuǎn)換。

class內(nèi)部處理

A objA ;  
A * ptr = & objA ;  
  
ptr->foo( ) ;   
objA.foo() ;  
//分別被轉(zhuǎn)換為:  foo_intA( ptr ) ;  
foo_intA( & objA ) ;

class內(nèi)部處理

靜態(tài)成員函數(shù):

靜態(tài)成員函數(shù)的主要特征是它沒(méi)有this指針。

故其:

①它不能夠直接存取其class中的非靜態(tài)成員

②它不能夠直接被聲明為const、virtual

③它不需要經(jīng)由class object才被調(diào)用——雖然大部分時(shí)候它是這樣被調(diào)用的。

網(wǎng)頁(yè)名稱(chēng):class內(nèi)部處理
本文網(wǎng)址:http://muchs.cn/article40/gcidho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、服務(wù)器托管、網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站收錄、網(wǎng)站營(yíng)銷(xiāo)小程序開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司