简介:关于类的特俗成员变量,就两个static类静态成员变量及函数以及const类常成员变量以及函数。他们的最本质的区别就是static相当于临时变量,可以修改,但是const不是,它是固定的不可更改的数据。所以,使用它们的时候一定要想到它们最本质的区别。
静态成员:包含静态数据成员和静态函数成员。然后你要加关键字:static
使用Static可以进行五种说明:
- 局部静态变量(使用域仅在局部,生命周期在全局)
- 全局静态变量(使用域在单文件,生命周期在全局)相当于文件全局变量
- 静态函数(函数的作用域默认是全局,加上静态修饰,这个函数的作用域就变成单文件)
- 类的静态数据成员,表示该数据不属于某个类对象,不管这个类会生成多少对象,所有对象所共享这个静态数据。这个静态数据只有一份存在内存中(全局数据区)
- 类的静态函数成员,这个函数不属于对象,只属于类,所以无法操作对象的成员数据,一般情况下只用来操作类的静态数据成员和静态函数成员(非静态成员函数,可以操作静态数据成员,也可以操作静态函数成员,普通的也都可以)
代码实践(有注释):
//类的特殊成员:静态成员。 //静态成员首先,你要想它到底为什么要静态,在类中,相当于避免了数据的 //多次加载,节约了运行的成本. //举个列子,简单说明。比如你要建立一百个对象,这一百个对象相当于一个军队 //的士兵,这些士兵有一些共同的特点,比如(每天都要站岗),这是每个士兵 //最基本的特征。现在,领导想看这些士兵站岗,但是为了能及时让领导看到 //士兵站岗这个动作,你就需要使用static.也就是你只需要让一个士兵去表演 //站岗。避免了让全体士兵都站岗。也就是我们这里所说的避免了类的多次重复加载。 #include<iostream> #include"test.h" using namespace std; static int m1=10;//全局静态变量,相当于int m1=10.可以不用写static,但是你要写在main文件外。 static int add(int a,int b){ return a + b; } class MyStu{//针对一个班级建立的类 static int grade;//班级是一个固定的数,只能声明,不能定义。 int age;//类内数据不占内存 public: static int getMes(){//类的静态函数只能调用类的所用静态变量以及函数 return grade; } void getAll(){ cout << grade << endl; grade = 8; cout << grade << endl; getMes(); cout << grade << endl; } MyStu(){} MyStu(int age){ this->age = age; } }; int MyStu::grade = 7;//类的静态数据成员必须在类外定义,类内声明。 void main(){ cout << "局部静态变量:" << endl; for (int i = 0; i < 4; i++){ static int m = 0; printf("m=%d\n",m++); }//未使用static,输出的数据全是0;使用了static,输出0,1,2,3 cout << "------------------------" << endl; cout << "全局静态变量:" << endl; cout << m1 << endl; cout << "------------------------" << endl; cout << "静态函数:" << endl; int m2 = add(1, 3); cout << m2 << endl; cout << "------------------------" << endl; cout << "类的静态成员变量:" << endl; MyStu s(2); cout << s.getMes()<< endl; MyStu s1; cout << s1.getMes() << endl; s1.getAll(); cout << "------------------------" << endl; }