gzpk

static

static变量特点(static方法类似):

1)static变量在全局数据区分配内存,并始终驻留在全局数据区,直到程序运行结束。

2)静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的,这样可避免不同文件中的命名冲突。

3)静态变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0。

 

好处: 静态全局变量不能被其它文件所用;其它文件中可以定义相同名字的变量,不会发生冲突。

面向对象的static特点:

1) 出现在类体外的函数定义不能指定关键字static;

2)静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;

3)非静态成员函数可以任意地访问静态成员函数和静态数据成员;

4)静态成员函数不能访问非静态成员函数和非静态数据成员;

5)由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长;

6)调用静态成员函数,可以用成员访问操作符(.)和(->)为一个类的对象或指向类对象的指针调用静态成员函数,也可以直接使用如下格式:

<类名>::<静态成员函数名>(<参数表>)                 //调用类的静态成员函数。

例子:

#include<iostream>  
using namespace std;  
  
class myclass  
{  
private:  
    int a;
    static int b;  //声明静态数据成员,不可在声明时初始化
    static int c;  //声明静态数据成员,不可在声明时初始化
    static const int d=10;  //声明静态const数据成员,可在声明时初始化  
public:  
    int fun1(); 
    static int fun2();  
};  
  
int myclass::b = 0;   //定义并初始化静态数据成员,不能出现static  
  
int myclass::fun1()  
{  
    this->a = 10;                            
    this->c = 20;          //非static函数可操作static变量
    cout<<"a="<<a<<endl;
    cout<<"c="<<c<<endl;
    return 0;
}  

int myclass::fun1()  
{  
    //a = 10;           static函数不可操作非static变量                             
    c = 100;          
    //cout<<"a="<<a<<endl;
    cout<<"b="<<b<<endl;
    cout<<"c="<<c<<endl;
    return 0;
} 

  
int main(void)  
{  
    myclass A;  
    A.fun1();
    A.fun2();
    //myclass::fun1();          //错
   myclassfun2();
    return 0;  
} 

  

posted on 2013-07-17 21:08  gzpk  阅读(335)  评论(0编辑  收藏  举报

导航