最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C/C++靜態(tài)類和this指針詳解及實例代碼

 更新時間:2017年02月14日 08:50:31   投稿:lqh  
這篇文章主要介紹了 C/C++靜態(tài)類和this指針詳解及實例代碼的相關資料,需要的朋友可以參考下

 C/C++靜態(tài)類和this指針詳解

1、靜態(tài)類

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

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

int main(void){

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

  return 0;
}

靜態(tài)成員變量

對應靜態(tài)成員有以下幾點需要注意:

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

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

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

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

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

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

靜態(tài)函數

static void outPut();

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

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

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

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

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

關于靜態(tài)類我們在總結一下:

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

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

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時均輸出自己的成員數據,那二者是如何區(qū)分的呢?答案是this指針。

在每個類的成員函數(非靜態(tài)成員函數)都隱含一個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方法中,這也就是為什么在靜態(tài)函數無法調用成員變量的原因了。

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

相關文章

  • C++ 命名空間避免命名沖突的實現

    C++ 命名空間避免命名沖突的實現

    命名空間是C++中用來避免命名沖突的一種機制,本文主要介紹了C++ 命名空間避免命名沖突的實現,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • C++刪除指定文件夾下N天及之前日志文件的方法

    C++刪除指定文件夾下N天及之前日志文件的方法

    這篇文章主要介紹了C++刪除指定文件夾下N天及之前日志文件的方法,涉及C++針對時間判斷及文件操作的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • C++基于CreateToolhelp32Snapshot獲取系統(tǒng)進程實例

    C++基于CreateToolhelp32Snapshot獲取系統(tǒng)進程實例

    這篇文章主要介紹了C++基于CreateToolhelp32Snapshot獲取系統(tǒng)進程實例,是Windows應用程序設計中非常實用的技巧,需要的朋友可以參考下
    2014-10-10
  • C 語言插入排序算法及實例代碼

    C 語言插入排序算法及實例代碼

    本文主要介紹C語言插入排序,這里給大家詳細介紹插入排序的思想并舉例說明,還有實現代碼,有需要的朋友可以參考下
    2016-07-07
  • 關于讀取popen輸出結果時未截斷字符串導致的命令行注入詳解

    關于讀取popen輸出結果時未截斷字符串導致的命令行注入詳解

    這篇文章主要給大家介紹了關于讀取popen輸出結果時未截斷字符串導致的命令行注入的相關資料,文中通過圖文及示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-03-03
  • MATLAB實現五子棋游戲(雙人對戰(zhàn)、可悔棋)

    MATLAB實現五子棋游戲(雙人對戰(zhàn)、可悔棋)

    這篇文章主要為大家詳細介紹了MATLAB實現五子棋游戲,可以進行雙人對戰(zhàn)、也可悔棋,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • OpenCV鼠標繪制矩形和截取矩形區(qū)域圖像

    OpenCV鼠標繪制矩形和截取矩形區(qū)域圖像

    這篇文章主要為大家詳細介紹了OpenCV鼠標繪制矩形和截取矩形區(qū)域圖像,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C++模擬Linux Shell編寫一個自定義命令

    C++模擬Linux Shell編寫一個自定義命令

    這篇文章主要介紹了C++如何模擬Linux Shell實現編寫一個自定義命令,本文通過實例代碼進行命令行解析,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • C++11?constexpr使用詳解

    C++11?constexpr使用詳解

    constexpr是一種比const?更嚴格的束縛,?它修飾的表達式本身在編譯期間可知,?并且編譯器會盡可能的?evaluate?at?compile?time,本文重點給大家介紹C++11?constexpr使用,需要的朋友可以參考下
    2021-12-12
  • C語言程序如何求學生總成績和平均成績

    C語言程序如何求學生總成績和平均成績

    這篇文章主要介紹了C語言程序如何求學生總成績和平均成績,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評論

永平县| 嵩明县| 南漳县| 曲阳县| 清丰县| 大新县| 长沙县| 宜都市| 铅山县| 长沙县| 余姚市| 阿图什市| 德钦县| 奉新县| 厦门市| 巴林左旗| 宁蒗| 纳雍县| 山东省| 宁河县| 安顺市| 正镶白旗| 临城县| 襄樊市| 庆阳市| 鄂托克前旗| 蒙城县| 弥渡县| 富蕴县| 平顺县| 肇源县| 长寿区| 九龙县| 万州区| 临澧县| 吴忠市| 商南县| 乌鲁木齐市| 乌拉特前旗| 绥德县| 巴中市|