类中的静态成员(static)

(一)静态数据成员 函数

      静态数据成员是类的全部对象共享的成员,而不是某个对象的成员。 this

      使用静态数据成员能够节省内存,静态数据成员只存储一处,供全部对象使用。静态数据成员至关于类中的“全局变量”(一个对象改变了它的值,例如改变的值为a,那么其余对象看到它的值为都为a)。 spa

 使用静态成员的方法和注意事项: 指针

一、 静态数据成员在定义或说明是前面加上关键字“static 对象

eg: private: 内存

          int  a; get

          static int staticVariable;//定义了一个静态变量 class

二、静态成员的初始化 变量

(1)初始化在类体外进行,前面不加static,以避免与通常静态变量或对象相混淆。 权限

(2)初始化时使用做用于运算符::来标明他所属的类(这也说明了静态数据成员是属于类的,而不是属于某个对象的。)

eg:    class A {

         private:

              int a ;

         public:

               static int staticVariable;

        };

        int A::staticVariable = 0; //在类外进行初始化,并加上做用于运算符(::)

注意:静态数据成员存放在静态存储区,必须对它进行初始化。

三、引用静态成员的格式

       若是静态成员的访问权限是public,则能够用

        <类名> ::<静态成员名>的格式来访问

       eg:A ::staticVariable = 10;

 举一个例子:

class Number{

    private:

          int a,b;

          static int staticVarible;

    public:

           void getVariable(){

                 cout << a << "," << b <<"," << staticVarible << endl;

             }  

           void getStaticVarible(){

                  cout << staticVarible << endl;

             }

           Number (int a , int b , int c){

                  this->a = a;//当参数的名字与类中变量名相同时,用this指针加以区分

                  this->b = b;

                  this->staticVarible = c;

            }

 };

 int Number :: staticVarible = 3;// 类外初始化静态数据成员


void main(){

 

    Number M(3,7,1);

    M.getVariable();

   

    Number N(10,8,11);

    N.getVariable();

   

    M.getStaticVarible();

    N.getStaticVarible(); 

}

输出结果:

3,7,1

10,8,11

11

11

 结果代表了在初始化了N之后,M中的StaticVarible的值变成了11,说明了静态数据成员是多个对象共享的。


(二)静态成员函数:

      静态成员函数与静态成员同样,都属于类,而不属于某个对象。所以,对静态成员的引用能够用类名

 注意:静态成员函数的实现中能够直接引用类中说明的静态成员,不能够直接引用类中说明的非静态成员(为何不能引用呢?由于非静态成员只能经过对象来调用,而不能经过类来调用,意味着在没有对象存在时,非静态成员是不分配内存的,若是静态成员函数用了非静态成员那么将产生错误)。静态成员函数若是要引用非静态成员时,能够经过对象来访问。

举一个例子:

class Number{ 

private:

    int a,b;

    static int staticVarible;  

public:

       Number (int a , int b , int c){ 

        this->a = a;

        this->b = b;

        this->staticVarible = c;   

    }

    int getStaticVarible(){   

        return staticVarible;

    }

   

    //静态成员函数能够在类内定义也能够在类外定义

    static void printStaticVarible(){

        cout << staticVarible; 

    };

    static void printVaribles(Number f);

 };

 

int Number :: staticVarible = 3;


void Number::printVaribles(Number f){

/*----这里用 f 能够调用类中的私有成员,是由于 printVaribles(Number f) 是类函数的缘故----*/

    f.printA();//只能用对象来访问非静态成员函数

    cout << "b = " << f.b << endl;//只能用对象类访问非静态数据成员

    cout << "staticVarible = " << staticVarible << endl ;//能够直接访问静态数据成员

   printStaticVarible();//能够直接访问静态成员函数



}

void main(){ 

    Number M(3,7,1);

    Number N(10,8,11);

   

/*------------两种方式调用静态成员函数-----------------*/

    M.printVaribles(M);//经过对象调用

    Number::printVaribles(N);//经过类名来调用

}


输出结果:

a = 3

b = 7

staticVarible = 11

静态成员函数 staticVarible = 11

a = 10

b = 8

staticVarible = 11

静态成员函数 staticVarible = 11

相关文章
相关标签/搜索