C++指针、this指针、静态成员
C++指針、this指針、靜態(tài)成員
一、C++ this指針
this指針指向調(diào)用的對象本身,在成員函數(shù)中,都會有一個默認的參數(shù)this。這點如果學過Python的話,可能會知道,在Python中每一個成員函數(shù)都會一個參數(shù)self,這里的this就是差不多的東西。其實具體來說,this指針也是指針,它存儲的也是一個地址。當我們用一個對象去調(diào)用一個成員函數(shù)時,我們會把該對象的地址傳給該函數(shù),這也就是在函數(shù)中的this參數(shù)。因此this指針中存儲的是調(diào)用對象的地址。
下面來看一個簡單的例子:
在編程的過程中會發(fā)現(xiàn)許多問題,在用指針來得到結(jié)構(gòu)體或者類的成員時我們不能使用’.'運算符來,需要使用->來訪問才不會報錯。其次,對于一個成員函數(shù)如何要使用參數(shù)的默認值,在類中定義時,不需要給出默認的函數(shù)參數(shù)。不然也會報錯。
運行結(jié)果:
剛才看到使用printL()函數(shù)利用this指針來調(diào)用成員函數(shù)和成員變量。還有另外的一種方式來實現(xiàn)同樣的操作,那就是友元函數(shù)。友元函數(shù)不屬于類,但可以訪問類的所有成員,包括私有成員和保護成員。與成員函數(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; }運行結(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指針一樣。
看一個小例子:
運行結(jié)果:
創(chuàng)建對象 創(chuàng)建對象 line Len is: 10 line2 Len is:3 釋放內(nèi)存 釋放內(nèi)存需要注意的是,類的指針訪問類的成員時需要使用->這個運算符。
三、類的靜態(tài)成員
類中的靜態(tài)的成員,意思是該類的所有對象共用這一個變量,不會隨著對象的創(chuàng)建而被拷貝。講到通俗一點就是,用static修飾的變量的地址已經(jīng)鎖定了,不可以更改。
靜態(tài)成員的用法,當靜態(tài)成員被定義時需要進行初始化。如果沒有初始化,那么當該類創(chuàng)建第一個對象時,會自動為所有的靜態(tài)成員變量進行初始化,值為0;并且在類中定義的靜態(tài)變量不可以在類中定義時就對其初始化。可以使用:類型 類名::變量名 = 0這種形式來進行初始化。
運行結(jié)果:
創(chuàng)建對象 已將創(chuàng)建的對象有:1 個 創(chuàng)建對象 創(chuàng)建對象 創(chuàng)建對象 已將創(chuàng)建的對象有:4 個 釋放內(nèi)存 釋放內(nèi)存 釋放內(nèi)存 釋放內(nèi)存總結(jié)
以上是生活随笔為你收集整理的C++指针、this指针、静态成员的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。