static
修饰,例如:
class Student{ public: Student(char *name, int age, float score); void show(); public: static int m_total; //静态成员变量 private: char *m_name; int m_age; float m_score; };这段代码声明了一个静态成员变量 m_total,用来统计学生的人数。
type class::name = value;
type 是变量的类型,class 是类名,name 是变量名,value 是初始值。将上面的 m_total 初始化:int Student::m_total = 0;
静态成员变量在初始化时不能再加 static,但必须要有数据类型。被 private、protected、public 修饰的静态成员变量都可以用这种方式初始化。//通过类类访问 static 成员变量 Student::m_total = 10; //通过对象来访问 static 成员变量 Student stu("小明", 15, 92.5f); stu.m_total = 20; //通过对象指针来访问 static 成员变量 Student *pstu = new Student("李华", 16, 96); pstu -> m_total = 20;这三种方式是等效的。
#include <iostream> using namespace std; class Student{ public: Student(char *name, int age, float score); void show(); private: static int m_total; //静态成员变量 private: char *m_name; int m_age; float m_score; }; //初始化静态成员变量 int Student::m_total = 0; Student::Student(char *name, int age, float score): m_name(name), m_age(age), m_score(score){ m_total++; //操作静态成员变量 } void Student::show(){ cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<"(当前共有"<<m_total<<"名学生)"<<endl; } int main(){ //创建匿名对象 (new Student("小明", 15, 90)) -> show(); (new Student("李磊", 16, 80)) -> show(); (new Student("张华", 16, 99)) -> show(); (new Student("王康", 14, 60)) -> show(); return 0; }运行结果:
int Student::m_total = 10;
初始化时可以赋初值,也可以不赋值。如果不赋值,那么会被默认初始化为 0。全局数据区的变量都有默认的初始值 0,而动态数据区(堆区、栈区)变量的默认值是不确定的,一般认为是垃圾值。
本文链接:http://task.lmcjl.com/news/8461.html