C++中的static
1.修饰全局变量--只能本文件使用 static int aa = 0;
2.修饰局部变量--延长生命周期
3.修饰函数 ---该函数只能在本文件使用
static 修饰类成员变量
需求: 1.一个类想知道自己一共产生了多少个对象
2.同类 对象之间想共享一些东西
将一个类成员变量修饰为 static即可
class student {
public:
static int objcnt; 它只有一份,所有对象共享它
它不依赖于对象而存在
string name,sex;
int age;
student(){ objcnt++;}
int getCnt(){return objcnt;}
};
那么什么时候分配他的空间: 和对象无关
定义类的时候就有了吗???? 类是不占空间的.
它是 第一次定义和初始化的时候 分配空间;
so,类静态成员 必须在某个地方 定义并初始化.
如何访问静态成员呢
1.所有对象共享它,可以使用 对象.objcnt
2. 类名::静态成员 方式;
3.类函数可以直接访问
####static修饰类成员函数
class student {
public:
static int objcnt; 它只有一份,所有对象共享它,它不依赖于对象而存在
string name,sex;
student(){ objcnt++;}
void show() { ...}
static int getCnt(){return objcnt;}
};
以前,你想使用类提供的函数,必须先 定义对象. 不方便...
可否不用定义对象,也能使用 类函数.可以的
static修饰的成员函数, 不依赖于对象而存在,一直都在, 所有的对象共享它.
注意: static成员函数只能访问 static变量.
#include<iostream>
using namespace std;
class student {
public:
static int objcnt; // 静态成员变量, 它只有一份,所有对象共享它
//它不依赖于对象而存在
string name,sex;
int age;
student(){ objcnt++;}
student(string name,int age){this->name=name;this->age=age; objcnt++;};
//static void show() {cout<<"name="<<name<<"sex="<<sex<<" staticcnt="<<objcnt<<endl;}
//静态成员函数,只能访问静态成员变量 ----因为对象可能不存在
static int getCnt(){ return objcnt;} //静态成员函数: 类成员可以直接访问
}; //静态函数,不依赖于对象而存在,所有对象共享它
int student::objcnt = 0; //定义并初始化---这个时候才分配了空间
int main()
{
student xiaohuang("huang",4);
xiaohuang.show();
cout<<"static fun = "<< student::getCnt() <<endl; //静态函数访问方法1: 不依赖于对象而是用
student xiaohuang ;
student xiaoqiang("xiaoqiang",3);
/*如何访问静态成员呢
1.所有对象共享它,可以使用 对象.objcnt
2. 类名::静态成员 方式;
3.类函数可以直接访问
*/
cout<<"obj cnt:"<<xiaoqiang.objcnt<<endl;
cout<<"obj cnt:"<<xiaoqiang.getCnt()<<endl; 静态函数访问方法2: 对象共享它,则对象也可以访问
cout<<"objcnt="<<student::objcnt<<endl; //不依赖对象
}