• 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);       //声明对象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();  //输出对象序号,直接通过指针访问静态数据成员

    }

  • 相关阅读:
    一元运算符重载 前置和后置++ --(这种一般用成员函数来实现重载)
    运算符中的二元重载,为什么要调用友元函数而不是全局函数的问题
    关于数组的封装不知道为什么错了,具体代码如下
    关于对象的动态建立和释放
    关于构造函数中调用构造函数的危险
    关于析构函数,构造函数匿名对象的总结,以厚忘了,可以回来观看很全
    关于深拷贝和浅拷贝的疑问
    构造函数的调用大全
    构造函数的调用(其中不包括赋值构造函数)
    LeetCode:Add Digits
  • 原文地址:https://www.cnblogs.com/lemaden/p/10238003.html
Copyright © 2020-2023  润新知