1. 程式人生 > >C++——指針5

C++——指針5

依賴 ati 初始 pac 函數實現 include ret sta clas

8.2 指向類的靜態成員的指針

對類的靜態成員的訪問不依賴於對象,可以用普通的指針來指向和訪問。

//通過指針訪問類的靜態數據成員

#include <iostream>

using namespace std;

class Point //Point類聲明

{

public: //外部接口

Point(int xx=0, int yy=0) {X=xx;Y=yy;countP++;} //構造函數

Point(Point &p); //拷貝構造函數

int GetX() {return X;}

int GetY() {return Y;}

static int countP; //靜態數據成員引用性說明

private: //私有數據成員

int X,Y;

};

Point::Point(Point &p)

{

X=p.X;

Y=p.Y;

countP++;

}

int Point::countP=0; //靜態數據成員定義性說明

int main() //主函數實現

{

int *count=&Point::countP; //聲明一個int型指針,指向類的靜態成員

Point A(4,5); //

聲明對象A

cout<<"Point A,"<<A.GetX()<<","<<A.GetY();

cout<<" Object id="<<*count<<endl; //直接通過指針訪問靜態數據成員

Point B(A); //聲明對象B

cout<<"Point B,"<<B.GetX()<<","<<B.GetY();

cout<<" Object id="<<*count<<endl; //

直接通過指針訪問靜態數據成員

}

//通過指針訪問類的靜態函數成員

#include <iostream>

using namespace std;

class Point //Point類聲明

{

public: //外部接口

Point(int xx=0, int yy=0) {X=xx;Y=yy;countP++;} //構造函數

Point(Point &p); //拷貝構造函數

int GetX() {return X;}

int GetY() {return Y;}

static void GetC() {cout<<" Object id="<<countP<<endl;} //靜態函數成員

private: //私有數據成員

int X,Y;

static int countP; //靜態數據成員引用性說明

};

Point::Point(Point &p)

{

X=p.X;

Y=p.Y;

countP++;

}

int Point::countP=0; //靜態數據成員定義性說明

//初始化,使用類名限定

int main() //主函數實現

{

void (*gc)()=Point::GetC; //聲明一個指向函數的指針,指向類的靜態成員函數

Point A(4,5); //聲明對象A

cout<<"Point A,"<<A.GetX()<<","<<A.GetY();

gc(); //輸出對象序號,直接通過指針訪問靜態數據成員

Point B(A); //聲明對象B

cout<<"Point B,"<<B.GetX()<<","<<B.GetY();

gc(); //輸出對象序號,直接通過指針訪問靜態數據成員

}

分享:

C++——指針5