日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++指针、this指针、静态成员

發(fā)布時(shí)間:2025/3/15 c/c++ 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++指针、this指针、静态成员 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

C++指針、this指針、靜態(tài)成員

一、C++ this指針

this指針指向調(diào)用的對象本身,在成員函數(shù)中,都會有一個(gè)默認(rèn)的參數(shù)this。這點(diǎn)如果學(xué)過Python的話,可能會知道,在Python中每一個(gè)成員函數(shù)都會一個(gè)參數(shù)self,這里的this就是差不多的東西。其實(shí)具體來說,this指針也是指針,它存儲的也是一個(gè)地址。當(dāng)我們用一個(gè)對象去調(diào)用一個(gè)成員函數(shù)時(shí),我們會把該對象的地址傳給該函數(shù),這也就是在函數(shù)中的this參數(shù)。因此this指針中存儲的是調(diào)用對象的地址。
下面來看一個(gè)簡單的例子:

#include <iostream> using namespace std;class Line {public:int getL();void setL(int l);void printL();Line();~Line();private:int len; };Line::Line() {cout << "創(chuàng)建對象" << endl; }Line::~Line() {cout << "釋放內(nèi)存" << endl; }void Line::setL(int l = 3) {this->len = l; }int Line::getL() {return this->len; }void Line::printL() {int temp;temp = this->getL();cout << "Len is:" << temp << endl; }int main() {Line line,line2;line.setL(10);line2.setL();line.printL();line2.printL();return 0; }

在編程的過程中會發(fā)現(xiàn)許多問題,在用指針來得到結(jié)構(gòu)體或者類的成員時(shí)我們不能使用’.'運(yùn)算符來,需要使用->來訪問才不會報(bào)錯(cuò)。其次,對于一個(gè)成員函數(shù)如何要使用參數(shù)的默認(rèn)值,在類中定義時(shí),不需要給出默認(rèn)的函數(shù)參數(shù)。不然也會報(bào)錯(cuò)。
運(yùn)行結(jié)果:

創(chuàng)建對象 創(chuàng)建對象 Len is:10 Len is:3 釋放內(nèi)存 釋放內(nèi)存

剛才看到使用printL()函數(shù)利用this指針來調(diào)用成員函數(shù)和成員變量。還有另外的一種方式來實(shí)現(xiàn)同樣的操作,那就是友元函數(shù)。友元函數(shù)不屬于類,但可以訪問類的所有成員,包括私有成員和保護(hù)成員。與成員函數(shù)不同的是它沒有this指針,它不屬于類。

#include <iostream> using namespace std;class Line {public:friend void friend_test(Line line);int getL();void setL(int l);void printL(); Line();~Line();private:int len; };Line::Line() {cout << "創(chuàng)建對象" << endl; }Line::~Line() {cout << "釋放內(nèi)存" << endl; }void Line::setL(int l = 3) {this->len = l; }int Line::getL() {return this->len; }void Line::printL() {int temp;temp = this->getL();cout << "Len is:" << temp << endl; }void friend_test(Line line) {cout << "Len is :"<< line.len << endl; }int main() {Line line,line2;line.setL(10);line2.setL();line.printL();line2.printL();friend_test(line);friend_test(line2);return 0; }

運(yùn)行結(jié)果:

創(chuàng)建對象 創(chuàng)建對象 Len is:10 Len is:3 Len is :10 釋放內(nèi)存 Len is :3 釋放內(nèi)存 釋放內(nèi)存 釋放內(nèi)存

可以看出,在友元函數(shù)中可以直接訪問私有變量。

二、類的指針

類的指針同普通變量的指針一樣存儲對象在內(nèi)存中的地址。就像上面的this指針一樣。
看一個(gè)小例子:

#include <iostream> using namespace std;class Line {public:int getL();void setL(int l);Line();~Line();private:int len; };Line::Line() {cout << "創(chuàng)建對象" << endl; }Line::~Line() {cout << "釋放內(nèi)存" << endl; }void Line::setL(int l = 3) {this->len = l; }int Line::getL() {return this->len; }int main() {Line line,line2;Line *p,*q;p = &line;q = &line2;p->setL(10);q->setL();cout << "line Len is: " << p->getL() << endl;cout << "line2 Len is:" << q->getL() << endl;return 0; }

運(yùn)行結(jié)果:

創(chuàng)建對象 創(chuàng)建對象 line Len is: 10 line2 Len is:3 釋放內(nèi)存 釋放內(nèi)存

需要注意的是,類的指針訪問類的成員時(shí)需要使用->這個(gè)運(yùn)算符。

三、類的靜態(tài)成員

類中的靜態(tài)的成員,意思是該類的所有對象共用這一個(gè)變量,不會隨著對象的創(chuàng)建而被拷貝。講到通俗一點(diǎn)就是,用static修飾的變量的地址已經(jīng)鎖定了,不可以更改。
靜態(tài)成員的用法,當(dāng)靜態(tài)成員被定義時(shí)需要進(jìn)行初始化。如果沒有初始化,那么當(dāng)該類創(chuàng)建第一個(gè)對象時(shí),會自動為所有的靜態(tài)成員變量進(jìn)行初始化,值為0;并且在類中定義的靜態(tài)變量不可以在類中定義時(shí)就對其初始化。可以使用:類型 類名::變量名 = 0這種形式來進(jìn)行初始化。

#include <iostream> using namespace std;class Line {public:static int count;int getL();void setL(int l);Line();~Line();private:int len; };int Line::count = 0;Line::Line() {cout << "創(chuàng)建對象" << endl;count++; }Line::~Line() {cout << "釋放內(nèi)存" << endl;count--; }void Line::setL(int l = 3) {this->len = l; }int Line::getL() {return this->len; }int main() {Line line;cout << "已將創(chuàng)建的對象有:"<< line.count << " 個(gè)" <<endl;Line lines[3];cout << "已將創(chuàng)建的對象有:"<< line.count << " 個(gè)" <<endl; return 0; }

運(yùn)行結(jié)果:

創(chuàng)建對象 已將創(chuàng)建的對象有:1 個(gè) 創(chuàng)建對象 創(chuàng)建對象 創(chuàng)建對象 已將創(chuàng)建的對象有:4 個(gè) 釋放內(nèi)存 釋放內(nèi)存 釋放內(nèi)存 釋放內(nèi)存

總結(jié)

以上是生活随笔為你收集整理的C++指针、this指针、静态成员的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。