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

C++語言基礎(chǔ) this和static關(guān)鍵字

 更新時間:2020年01月31日 18:11:45   作者:夜行過客  
這篇文章主要介紹了C++語言基礎(chǔ) this和static關(guān)鍵字,需要的朋友可以參考下

一.this關(guān)鍵字

this是一個指針,可用其訪問成員變量或成員函數(shù)

下面是使用this的一個完整示例:

#include <iostream>
using namespace std;

class Student{
public:
  void setname(char *name);
  void setage(int age);
  void setscore(float score);
  void show();
private:
  char *name;
  int age;
  float score;
};

void Student::setname(char *name){
  this->name = name;
}
void Student::setage(int age){
  this->age = age;
}
void Student::setscore(float score){
  this->score = score;
}
void Student::show(){
  cout<<this->name<<"的年齡是"<<this->age<<",成績是"<<this->score<<endl;
}

int main(){
  Student *pstu = new Student;
  pstu -> setname("李華");
  pstu -> setage(16);
  pstu -> setscore(96.5);
  pstu -> show();

  return 0;
}

運行結(jié)果:

李華的年齡是16,成績是96.5

this 只能用在類的內(nèi)部,通過 this 可以訪問類的所有成員,包括 private、protected、public 屬性的。

本例中成員函數(shù)的參數(shù)和成員變量重名,只能通過 this 區(qū)分。以成員函數(shù)setname(char *name)為例,它的形參是name,和成員變量name重名,如果寫作name = name;這樣的語句,就是給形參name賦值,而不是給成員變量name賦值。而寫作this -> name = name;后,=左邊的name就是成員變量,右邊的name就是形參,一目了然。

二.static 關(guān)鍵字

2.1 static 靜態(tài)成員變量

類似于java,C++中也有static靜態(tài)成員變量,用法如下:

#include <iostream>

using namespace std;

class Student {
public:
  Student(char *name, int age, float score);
  void show();
public:
  static int m_total; // 靜態(tài)成員變量
private:
  char *m_name;
  int m_age;
  float m_score;
};

int Student::m_total = 0; // 初始化靜態(tài)成員變量時不需要加static


Student::Student(char *name, int age, float score) {

}
void Student::show() {

}


int main()
{
  Student::m_total = 10; // 可以直接由類名訪問
  // 棧區(qū)
  Student stu("Jack",15,92.5f);
  stu.m_total = 20;   // 也可以直接由對象名訪問
  // 堆區(qū)
  Student *pstu = new Student("Tom",16,96);
  pstu->m_total = 20;  // 也可以直接由對象名訪問

  delete pstu;
  return 0;

}

注意:

1) 一個類中可以有一個或多個靜態(tài)成員變量,所有的對象都共享這些靜態(tài)成員變量,都可以引用它。

2) static 成員變量和普通 static 變量一樣,都在內(nèi)存分區(qū)中的全局數(shù)據(jù)區(qū)分配內(nèi)存,到程序結(jié)束時才釋放。這就意味著,static 成員變量不隨對象的創(chuàng)建而分配內(nèi)存,也不隨對象的銷毀而釋放內(nèi)存。而普通成員變量在對象創(chuàng)建時分配內(nèi)存,在對象銷毀時釋放內(nèi)存。

3) 靜態(tài)成員變量必須初始化,而且只能在類體外進行。例如:

int Student::m_total = 0; // 初始化靜態(tài)成員變量時不需要加static

初始化時可以賦初值,也可以不賦值。如果不賦值,那么會被默認初始化為 0。全局數(shù)據(jù)區(qū)的變量都有默認的初始值 0,而動態(tài)數(shù)據(jù)區(qū)(堆區(qū)、棧區(qū))變量的默認值是不確定的,一般認為是垃圾值。

4) 靜態(tài)成員變量既可以通過對象名訪問,也可以通過類名訪問,但要遵循 private、protected 和 public 關(guān)鍵字的訪問權(quán)限限制。當(dāng)通過對象名訪問時,對于不同的對象,訪問的是同一份內(nèi)存。

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

下面演示static 靜態(tài)成員函數(shù)的用法:

#include <iostream>
using namespace std;

class Student{
public:
  Student(char *name, int age, float score);
  void show();
public: //聲明靜態(tài)成員函數(shù)
  static int getTotal();
  static float getPoints();
private:
  static int m_total; //總?cè)藬?shù)
  static float m_points; //總成績
private:
  char *m_name;
  int m_age;
  float m_score;
};

int Student::m_total = 0;
float Student::m_points = 0.0;

Student::Student(char *name, int age, float score): m_name(name), m_age(age), m_score(score){
  m_total++;
  m_points += score;
}
void Student::show(){
  cout<<m_name<<"的年齡是"<<m_age<<",成績是"<<m_score<<endl;
}
//定義靜態(tài)成員函數(shù)
int Student::getTotal(){
  return m_total;
}
float Student::getPoints(){
  return m_points;
}

int main(){
  (new Student("小明", 15, 90.6)) -> show();
  (new Student("李磊", 16, 80.5)) -> show();
  (new Student("張華", 16, 99.0)) -> show();
  (new Student("王康", 14, 60.8)) -> show();

  int total = Student::getTotal();
  float points = Student::getPoints();
  cout<<"當(dāng)前共有"<<total<<"名學(xué)生,總成績是"<<points<<",平均分是"<<points/total<<endl;

  return 0;
}

注意:

1) 靜態(tài)成員函數(shù)與普通成員函數(shù)的根本區(qū)別在于:普通成員函數(shù)有 this 指針,可以訪問類中的任意成員;而靜態(tài)成員函數(shù)沒有 this 指針,只能訪問靜態(tài)成員(包括靜態(tài)成員變量和靜態(tài)成員函數(shù))。

2) 上例中的getTotal()、getPoints() 也可以聲明為普通成員函數(shù),但是它們都只對靜態(tài)成員進行操作,加上 static 語義更加明確。

3) 和靜態(tài)成員變量類似,靜態(tài)成員函數(shù)在聲明時要加 static,在定義時不能加 static。靜態(tài)成員函數(shù)可以通過類來調(diào)用(一般都是這樣做),但也可以通過對象來調(diào)用。

相關(guān)文章

  • windows下vscode環(huán)境c++利用matplotlibcpp繪圖

    windows下vscode環(huán)境c++利用matplotlibcpp繪圖

    本文主要介紹了windows下vscode環(huán)境c++利用matplotlibcpp繪圖,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • C語言實現(xiàn)圖書館管理系統(tǒng)

    C語言實現(xiàn)圖書館管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)圖書館管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 淺談Qt信號槽與事件循環(huán)的關(guān)系

    淺談Qt信號槽與事件循環(huán)的關(guān)系

    本文主要介紹了Qt信號槽與事件循環(huán)的關(guān)系,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C++ 實現(xiàn)靜態(tài)單鏈表的實例

    C++ 實現(xiàn)靜態(tài)單鏈表的實例

    這篇文章主要介紹了C++ 實現(xiàn)靜態(tài)單鏈表的實例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 結(jié)合C++11新特性來學(xué)習(xí)C++中l(wèi)ambda表達式的用法

    結(jié)合C++11新特性來學(xué)習(xí)C++中l(wèi)ambda表達式的用法

    這篇文章主要介紹了C++中l(wèi)ambda表達式的用法,lambda表達式的引入可謂是C++11中的一大亮點,同時文中也涉及到了C++14標(biāo)準(zhǔn)中關(guān)于lambda的一些內(nèi)容,需要的朋友可以參考下
    2016-01-01
  • C語言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法

    C語言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法

    這篇文章主要介紹了C語言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法,涉及C語言針對數(shù)組的遍歷與判斷技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • Qt自定義Widget實現(xiàn)互斥效果詳解

    Qt自定義Widget實現(xiàn)互斥效果詳解

    在使用Qt時,可能會遇到這種問題:多個控件互斥,類似于QRadiButton控件,但又不是單純的QRadioButton控件,互斥的可能是一個窗口,也可能是幾個按鈕,等等多種情況。本文將介紹利用Qt自定義Widget實現(xiàn)的互斥效果,需要的可以參考一下
    2022-01-01
  • C/C++根據(jù)年月日計算星期幾(蔡勒公式篇)

    C/C++根據(jù)年月日計算星期幾(蔡勒公式篇)

    這篇文章主要給大家介紹了關(guān)于C/C++根據(jù)年月日計算星期幾(蔡勒公式篇)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • C語言菜鳥基礎(chǔ)教程之for循環(huán)

    C語言菜鳥基礎(chǔ)教程之for循環(huán)

    c語言中的for循環(huán)語句使用最為靈活,不僅可以用于循環(huán)次數(shù)已經(jīng)確定的情況,而且可以用于循環(huán)次數(shù)不確定而只給出循環(huán)結(jié)束條件的情況,它完全可以代替while語句.
    2017-10-10
  • Qt自繪實現(xiàn)蘋果按鈕滑動效果的示例代碼

    Qt自繪實現(xiàn)蘋果按鈕滑動效果的示例代碼

    這篇文章主要介紹了Qt自繪實現(xiàn)蘋果按鈕滑動效果的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評論

定结县| 吴江市| 商水县| 大英县| 九龙城区| 克山县| 奎屯市| 靖边县| 乌恰县| 宁武县| 同心县| 马龙县| 札达县| 西昌市| 丹凤县| 武穴市| 焦作市| 涟水县| 温泉县| 民权县| 永泰县| 苏尼特左旗| 南木林县| 三门县| 保亭| 诸城市| 湘西| 进贤县| 尚义县| 济南市| 洛扎县| 邢台县| 滁州市| 田林县| 曲阳县| 汤原县| 鲁山县| 平乐县| 宁城县| 扶余县| 密山市|