C++静态(static)成员函数和成员变量的使用

静态成员变量和成员函数是指在类中以static修饰的变量和函数。

 

直接看例子熟悉其使用和特性:

 

#include

using namespace std;

 

class test

{

public:

    test() :a(0), b(0) {

    }

    ~test() {

    }

    void add() {

        a++; b++;

        c++;   // 非静态函数可以使用静态成员变量

    }

    static void adds() {

        //a++; b++;  // 编译报错,静态成员函数无法使用非静态变量

        c++;

    }

    static int getC() {

        cout << "static c : " << c << endl;

        return c;

    }

 

    void print() {

        cout << "a : " << a << endl;

        cout << "b : " << b << endl;

        cout << "c : " << c << endl;

    }

 

private:

    int a;

    int b;

    static int c; //静态成员变量

};

 

//静态类成员变量初始化,同时给C分配内存。

int test::c = 10;

 

void main()

{

 

    test  a1, a2, a3;

    a1.print(); //0,0,10

    a2.adds();  //0,0,12

    a2.add();   //1,1,12

    a3.print(); //0,0,12

 

    //静态成员函数的调用方法

    a3.getC();   //用对象.

    test::getC();  //::

 

    cout << "end..." << endl;

    system("pause");

    return;

}

 

运行结果:

    C++静态(static)成员函数和成员变量的使用_第1张图片

通过上面例子可以看出:

  • 静态成员提供了一个同类对象的共享机制,静态成员局部于类,但他不属于对象;无论创建多少给对象,这些对象都共享静态成员;
  • 静态成员函数提供不依赖于类数据结构的共同操作,它没有this指针;
  • 有两种方法在类外调用静态成员函数,分别是1)类名::函数,2)通过对象调用;
  • 普通成员函数可以使用静态变量,但静态成员函数中不能使用普通变量;
  • 类静态成员变量初始化和分配内存在类外进行,不需要加static但需要带上变量类型;
  • 子类可以定义一个与父类一样的静态变量,以屏蔽父类的影响。
  • 当A类包含静态成员变量时,B类继承A类并使用任何方法时,必须对A中的静态成员变量进行初始化,否则编译错误;因为静态成员变量需要独立初始化同时分配内存。

 

思考:为什么静态成员函数中不能使用非静态变量?

 

因为静态成员函数属于整个类,如果在其中使用非静态成员变量(如b),同时定义了多个类对象a1,a2,a3,编译器就无法确定该变量是属于哪个对象的(a1.b, a2.b, a3.b)。

你可能感兴趣的:(C/C++,C/C++技术笔记)