C++——指針5
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); //
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