static

it2022-05-05  127

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; }

  

转载于:https://www.cnblogs.com/ManMonth/p/3196822.html


最新回复(0)