美文网首页C++ 杂记C++
C++ 静态数据成员 静态成员函数 使用实例

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

作者: 赵者也 | 来源:发表于2017-01-02 19:40 被阅读74次

注意:本文中代码均使用 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();
}

输出结果,如下图所示:

输出结果

相关文章

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

    注意:本文中代码均使用 Qt 开发编译环境C++ 静态成员 关键字static有三个明显的作用: 在函数体,一个被...

  • 深入理解C++对象模型

    1. C++对象模型 所有的非静态数据成员存储在对象本身中。所有的静态数据成员、成员函数(包括静态与非静态)都置于...

  • 原型和原型链

    1. 静态成员和实例成员 静态成员在构造函数本身上添加的成员,静态成员只能通过构造函数来访问。 2. 实例成员 实...

  • 第三章 类与对象应用

    学习目的 掌握静态数据成员及静态成员函数的使用; 掌握友元函数的使用; 掌握常成员函数的应用; 掌握对象成员的使用...

  • C++——静态成员函数与静态成员变量

    静态成员函数与静态成员变量使用static进行定义。 静态成员函数和静态成员变量其实就是全局函数与全局变量。 静态...

  • C++——静态成员函数与静态成员变量

    静态成员函数与静态成员变量使用static进行定义。 静态成员函数和静态成员变量其实就是全局函数与全局变量。 静态...

  • TypeScript 03——成员方法定义与调用

    类中的成员分为: 静态成员 和 实例成员;静态成员包含了:静态属性 和 静态方法;实例成员包含了:实例属性 和 实...

  • 类的静态成员*

    静态类成员包括静态数据成员和静态函数成员两部分。 静态数据成员: 类体中的数据成员的声明前加上static关键字,...

  • c++语法2

    接上篇我们继续学习静态成员、友元函数、继承、多重继承,继承访问权限等 静态成员与友元函数:c++中静态成员与jav...

  • C++ 面向对象模型初探(8)

    1. 成员变量和函数的存储 c++中“数据”和“处理数据的操作(函数)”是分开存储的 c++中的非静态数据成员直接...

网友评论

    本文标题:C++ 静态数据成员 静态成员函数 使用实例

    本文链接:https://www.haomeiwen.com/subject/izawvttx.html