C++ 静态数据成员 静态成员函数 使用实例

注意:本文中代码均使用 Qt 开发编译环境
C++ 静态成员

关键字static有三个明显的作用:

  1. 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
  2. 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
  3. 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

我们今天主要看两个使用方法:
(1)静态数据成员
用关键字static声明;该类的所有对象维护该成员的同一个拷贝;必须在类外定义和初始化,用(::)来指明所属的类。

(2)静态成员函数
类外代码可以(但非必须)使用类名和作用域操作符来调用静态成员函数;静态成员函数只能引用属于该类的静态数据成员或静态成员函数。

关于这个静态数据成员呢,我们以后在处理和使用“单例模式”的时候会经常用到,但是我们今天不是要讲单例模式,我们就是感受一下静态数据成员和静态成员函数的使用方法。

下面我们写一个具有静态数据成员和静态成员函数的Point类。

#include <QCoreApplication>
#include <QDebug>

class 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 count(){
        qDebug()<<"Object count: "<<countP;
        return countP;
    }

private:
    int X,Y;
    static int countP;
};

Point::Point(Point &p) {
    qDebug()<<"i`m a copy!";
    X = p.X;
    Y = p.Y;
    countP++;
}

int Point::countP = 0;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Point A(4,5);
    qDebug()<<"Point A, "<<A.getX()<<","<<A.getY();
    Point::count();
    A.count();

    Point B(A);
    qDebug()<<"Point B, "<<B.getX()<<","<<B.getY();
    B.count();
    Point::count();

    return a.exec();
}

输出结果,如下图所示:

输出结果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 深入理解C# 静态类与非静态类、静态成员的区别静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不...
    好怕怕阅读 5,324评论 0 1
  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,518评论 9 118
  • 以前总是觉得,就算自己遇见一个不是那么好的人,但至少自己真心实意的爱过他,那也没什么可后悔的了。可时间过得越久,才...
    谢意舒阅读 1,693评论 0 0
  • 昨天去了趟水长城,发生了一些事情,首先自己是有进步的,最起码没有着急的否定自己,心里当然是有一些波动的,但我觉得无...
    朱一发阅读 1,396评论 0 1
  • 我也不知道写点什么,今年执医的考试在即,而今年我复习考试的地方真可谓纵横大江南北,无论时间场合啊!我还是有些忐忑和...
    半夏长安阅读 5,245评论 2 0

友情链接更多精彩内容