今天就跟大家聊聊有關(guān)C++中this和static關(guān)鍵字的作用是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供玉州網(wǎng)站建設(shè)、玉州做網(wǎng)站、玉州網(wǎng)站設(shè)計、玉州網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、玉州企業(yè)網(wǎng)站模板建站服務(wù),十年玉州做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。一.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)限限制。當通過對象名訪問時,對于不同的對象,訪問的是同一份內(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<<"當前共有"<<total<<"名學生,總成績是"<<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)用。
看完上述內(nèi)容,你們對C++中this和static關(guān)鍵字的作用是什么有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝大家的支持。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站aaarwkj.com,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
當前文章:C++中this和static關(guān)鍵字的作用是什么-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://aaarwkj.com/article36/dshisg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導航、電子商務(wù)、Google、ChatGPT、動態(tài)網(wǎng)站、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容