真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++中this指針、靜態(tài)成員、常量成員函數(shù)的示例分析

這篇文章主要為大家展示了“C++中this指針、靜態(tài)成員、常量成員函數(shù)的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“C++中this指針、靜態(tài)成員、常量成員函數(shù)的示例分析”這篇文章吧。

十年的平壩網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都營銷網(wǎng)站建設(shè)的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整平壩建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“平壩網(wǎng)站設(shè)計(jì)”,“平壩網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

一、this指針

1、C++程序到C程序的翻譯

class CCar {                          struct CCar {
    public:                                int price;
    int price;                        };
    void SetPrice(int p);             void SetPrice(struct CCar * this,int p){
};                                        this->price = p;
void CCar::SetPrice(int p){           }
    price = p; //this->price = p;
}                                     int main() {
int main(){                               struct CCar car;
    CCar car;                             SetPrice( & car,20000);
    car.SetPrice(20000);                  return 0;
    return 0;                         }
}

2、this指針作用:非靜態(tài)成員函數(shù)中可以直接使用this來代表指向該函數(shù)作用的對象的指針

3、this指針和靜態(tài)成員函數(shù):靜態(tài)成員函數(shù)并不具體作用與某個(gè)對象,所以靜態(tài)成員函數(shù)中不能使用 this 指針

二、靜態(tài)成員

  • 靜態(tài)成員:在說明前面加了static關(guān)鍵字的成員。

  • 普通成員變量每個(gè)對象有各自的一份,而靜態(tài)成員變量一共就一份,為所有對象共享,sizeof 運(yùn)算符不會(huì)計(jì)算靜態(tài)成員變量。

  • 普通成員函數(shù)必須具體作用于某個(gè)對象,而靜態(tài)成員函數(shù)并不具體作用于某個(gè)對象,不需要通過對象就能訪問。

class CRectangle{
    private:
        int w, h;
        static int nTotalArea; // 靜態(tài)成員變量
    public:
        CRectangle(int w_,int h_);
        ~CRectangle();
        static void PrintTotal(); // 靜態(tài)成員函數(shù)
};

1、訪問靜態(tài)成員的方法:

  • 類名::成員名        CRectangle::PrintTotal();

  • 對象名.成員名     CRectangle r; r.PrintTotal();

  • 指針->成員名       CRectangle * p = &r; p->PrintTotal();

  • 引用.成員名         CRectangle & ref = r; int n = ref.nTotalNumber;

2、注意事項(xiàng):

  • 靜態(tài)成員變量本質(zhì)上是全局變量,哪怕一個(gè)對象都不存在,類的靜態(tài)成員變量也存在

  • 必須在定義類的文件中對靜態(tài)成員變量進(jìn)行一次說明或初始化。否則編譯能通過,鏈接不能通過

  • 在靜態(tài)成員函數(shù)中,不能訪問非靜態(tài)成員變量,也不能調(diào)用非靜態(tài)成員函數(shù)

三、成員對象和封閉類

1、定義:有成員對象的類叫 封閉(enclosing)類

class CTyre{             // 輪胎類
    private:
        int radius;      // 半徑
        int width;       // 寬度
    public:
        CTyre(int r,int w):radius(r),width(w) { }
};
class CEngine{           // 引擎類
};
class CCar {             // 汽車類
    private:
        int price;       // 價(jià)格
        CTyre tyre;
        CEngine engine;
    public:
        CCar(int p,int tr,int tw );
};
CCar::CCar(int p,int tr,int w):price(p),tyre(tr, w){};
int main(){
    CCar car(20000,17,225);
    return 0;
}

上例中,如果 CCar類不定義構(gòu)造函數(shù), 則下面的語句會(huì)編譯出錯(cuò):CCar car;因?yàn)榫幾g器不明白 car.tyre該如何初始化。car.engine 的初始化沒問題,用默認(rèn)構(gòu)造函數(shù)即可。任何生成封閉類對象的語句,都要讓編譯器明白,對象中的成員對象,是如何初始化的。具體的做法就是:通過封閉類的構(gòu)造函數(shù)的初始化列表。

2、封閉類構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行順序

  • 封閉類對象生成時(shí),先執(zhí)行所有對象成員的構(gòu)造函數(shù),然后才執(zhí)行封閉類的構(gòu)造函數(shù)。

  • 對象成員的構(gòu)造函數(shù)調(diào)用次序和對象成員在類中的說明次序一致,與它們在成員初始化列表中出現(xiàn)的次序無關(guān)。

  • 當(dāng)封閉類的對象消亡時(shí),先執(zhí)行封閉類的析構(gòu)函數(shù),然后再執(zhí)行成員對象的析構(gòu)函數(shù)。次序和構(gòu)造函數(shù)的調(diào)用次序相反。

class CTyre {
    public:
        CTyre() { cout << "CTyre contructor" << endl; }
        ~CTyre() { cout << "CTyre destructor" << endl; }
};
class CEngine {
    public:
        CEngine() { cout << "CEngine contructor" << endl; }
        ~CEngine() { cout << "CEngine destructor" << endl; }
};
class CCar {
    private:
        CEngine engine;
        CTyre tyre;
    public:
        CCar( ) { cout << “CCar contructor” << endl; }
        ~CCar() { cout << "CCar destructor" << endl; }
};
int main(){
    CCar car;
    return 0;
}
//輸出結(jié)果:
CEngine contructor
CTyre contructor
CCar contructor
CCar destructor
CTyre destructor
CEngine destructor

四、友元(friends)

1、友元分為友元函數(shù)和友元類兩種

(1)友元函數(shù) :  一個(gè)類的友元函數(shù)可以訪問該類的私有成員

class CCar ;     //提前聲明 CCar 類,以便后面的CDriver 類使用
class CDriver{
    public:
    void ModifyCar( CCar * pCar) ;         // 改裝汽車
};
class CCar{
    private:
        int price;
        friend int MostExpensiveCar( CCar cars[], int total); // 聲明友元
        friend void CDriver::ModifyCar(CCar * pCar);     // 聲明友元,可包括構(gòu)造、析構(gòu)函數(shù)
};
void CDriver::ModifyCar( CCar * pCar){
    pCar->price += 1000;                        // 汽車改裝后價(jià)值增加
}
int MostExpensiveCar( CCar cars[],int total){   // 求最貴汽車的價(jià)格                           
    int tmpMax = -1;
    for( int i = 0;i < total; ++i )
    if( cars[i].price > tmpMax)
    tmpMax = cars[i].price;
    return tmpMax;
}

(2)友元類 : 如果A 是B的友元類,那么A 的成員函數(shù)可以訪問B的私有成員,友元類之間的關(guān)系不能傳遞,不能繼承

class B{
    friend class A;      // 聲明A為友元類
};

五、常量成員函數(shù)

1、作用:如果不希望某個(gè)對象的值被改變,則定義該對象的時(shí)候可以在前面加 const關(guān)鍵字

  • 在類的成員函數(shù)說明后面可以加const關(guān)鍵字,則該成員函數(shù)成為常量成員函數(shù)。

  • 常量成員函數(shù)內(nèi)部不能改變屬性的值,也不能調(diào)用非常量成員函數(shù)

  • 在定義常量成員函數(shù)和聲明常量成員函數(shù)時(shí)都應(yīng)該使用const 關(guān)鍵字

class Sample {
    private :
        int value;
    public:
        Sample() { }
        void SetValue() {  }
};
const Sample Obj;  //  常量對象
Obj.SetValue ();   //錯(cuò)誤,常量對象只能使用構(gòu)造函數(shù)、析構(gòu)函數(shù)和有const說明的函數(shù)(常量方法)

2、常量成員函數(shù)的重載:兩個(gè)函數(shù),名字和參數(shù)表都一樣,但是一個(gè)是const,一個(gè)不是,算重載

3、mutable成員變量:

(1)作用:mutable突破const的限制而設(shè)置,被mutable修飾的變量將永遠(yuǎn)處于可變的轉(zhuǎn)態(tài),即使在一個(gè)const函數(shù)中。

(2)應(yīng)用:如果類的成員函數(shù)不會(huì)改變對象的狀態(tài),那么一般會(huì)聲明成const。但是,有些時(shí)候,需要在const的函數(shù)里面修改一些跟類狀態(tài)無關(guān)的數(shù)據(jù)成員,那么這些數(shù)據(jù)成員就應(yīng)該被mutable來修飾。

class CTest{
    public:
        bool GetData() const{
            m_n1++;
            return m_b2;
        }
    private:
        mutable int m_n1;
        bool m_b2;
};

以上是“C++中this指針、靜態(tài)成員、常量成員函數(shù)的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


網(wǎng)頁題目:C++中this指針、靜態(tài)成員、常量成員函數(shù)的示例分析
本文鏈接:http://weahome.cn/article/jjspoi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部