国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

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

2020-01-26 14:15:09
字體:
來源:轉載
供稿:網友

 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方法中,這也就是為什么在靜態函數無法調用成員變量的原因了。

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 元朗区| 灵宝市| 永平县| 永春县| 咸丰县| 克山县| 礼泉县| 安塞县| 肥乡县| 确山县| 平果县| 泊头市| 荆门市| 合江县| 靖边县| 神池县| 厦门市| 筠连县| 平舆县| 界首市| 岳阳市| 璧山县| 莆田市| 海盐县| 松原市| 新营市| 永福县| 永和县| 富民县| 铜陵市| 共和县| 五大连池市| 南丰县| 东乡| 濮阳市| 开阳县| 广昌县| 阳原县| 武功县| 讷河市| 仙游县|