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

溫馨提示×

溫馨提示×

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

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

C/C++靜態類和this指針詳解及實例代碼

發布時間:2020-10-05 18:54:45 來源:腳本之家 閱讀:213 作者:lqh 欄目:編程語言

 C/C++靜態類和this指針詳解

1、靜態類

C++的靜態成員不僅可以通過對象來訪問,還可以直接通過類名來訪問。

class CBook{
public:
  static double price;//需要通過類外來進行初始化
}

int main(void){

  CBook book;
  book.price;//通過對象來訪問
  CBook::price//通過類名來訪問

  return 0;
}

靜態成員變量

對應靜態成員有以下幾點需要注意:

(1)靜態數據成員可以是當前類的類型,而其他數據成員只能是當前類的指針或應用類型。

class CBook{
public:
  static double price;
  CBook book;//非法定義,不允許在該類中定義所屬類的對象
  static CBook m_book;//正確
  CBook *book;//正確
};

(2)靜態數據成員可以作為其他成員函數的默認參數(不同的數據類型不能作為參數)。

class CBook{
public:
  int pages;
  static double price;

  //定義一個函數,以靜態數據作為默認參數
  void outPutInfo(int data = price){
    //實現
  }

  //錯誤定義,普通數據不能作為默認參數
  void outPutPage(int data = pages){
    //實現
  }
};

靜態函數

static void outPut();

(1)類的靜態成員函數只能訪問靜態數據成員,不能訪問普通數據成員(因為沒有this指針)。

(2)靜態成員函數不能定義為const成員函數(即靜態成員函數末尾不能加上const關鍵字)

static void outPut() const;//錯誤定義

(3)在定義靜態成員函數時,如果函數的實現位于類體外,則在函數的實現部分不能再標識static關鍵字。

//錯誤的定義
static void CBook::outPutInfo(){
  //實現
}

關于靜態類我們在總結一下:

(1)類的靜態成員函數是屬于整個類而非類的對象,所以它沒有this指針,這就導致 了它僅能訪問類的靜態數據和靜態成員函數。

(2)不能將靜態成員函數定義為虛函數。

2、this

C++

class CBook{

public:
  int pages;
  void outputPages(){
    cout<<pages<<endl;
  }
};

int main(){
  CBook book1,book2;
  book1.pages = 10;
  book2.pages = 20;
  book1.outputPages();
  book2.outputPages();
  return 0;
}

book1和book2兩個對象都有自己的數據成員pages,在調用outputPages時均輸出自己的成員數據,那二者是如何區分的呢?答案是this指針。

在每個類的成員函數(非靜態成員函數)都隱含一個this指針,指向被調用對象的指針,其類型為當前類的指針類型。

所以類似于上面的outputPages()方法,編譯器將其解釋為:

//函數調用
book1.outputPages(&book1);

//函數實現
void outputPages(CBook *this){//隱含的this指針
  cout<<this->pages<<endl;//使用this指針訪問數據成員
}

Java

/**
 * 本示例為了說明this的三種用法!
 */
package test;
public class ThisTest {
  private int i=0;

  ThisTest(int i){
    //(1)this.i表示成員變量i,i表示參數
    this.i=i+1;
  }

  ThisTest(String s){
    System.out.println("String constructor: "+s);
  }

  ThisTest(int i,String s){
    //(2)this調用第二個構造器
    this(s);

    this.i=i++;
  }
  public ThisTest increment(){
    this.i++;
    //(3)返回的是當前的對象
    return this;
  }
  public static void main(String[] args){
    ThisTest tt0=new ThisTest(10);
    ThisTest tt1=new ThisTest("ok");
    ThisTest tt2=new ThisTest(20,"ok again!");

    System.out.println(tt0.increment().increment().increment().i);
  }
}

這里說明一下,this表示當前對象的引用,另this不能用在static方法中,這也就是為什么在靜態函數無法調用成員變量的原因了。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

向AI問一下細節

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

AI

潼南县| 登封市| 浏阳市| 顺义区| 建昌县| 饶河县| 阿图什市| 云梦县| 阜阳市| 太仆寺旗| 大石桥市| 昭通市| 北票市| 驻马店市| 手游| 高淳县| 安顺市| 朝阳区| 交城县| 清丰县| 龙门县| 云龙县| 西昌市| 通州区| 阜新| 巴马| 晋州市| 寻甸| 安塞县| 石首市| 绥芬河市| 扎兰屯市| 玛多县| 麻城市| 农安县| 威信县| 荣成市| 波密县| 彭泽县| 和硕县| 丹阳市|