class stu
{
private:
static int m_total;
};
int stu::m_total = 0;
- 可以使用静态成员变量实现多个对象共享数据的目的;
- static成员变量属于类,不属于某个具体的对象,即使创建多个对象,也只为m_total分配一份内存,所有对象使用的都是这份内存中的数据。当某个对象修改m_total时,也会影响到其他对象。
- static成员变量必须在类声明的外部初始化,具体形式为:type class::name = value; type是变量类型,class是类名,name是变量名,value是初始值。形如,上面代码中的int stu::m_total = 0;初始化时可以赋初值,也可以不赋值,不赋值会被默认初始化为0;
- static成员是在(类外)初始化时分配的内存空间。
- static成员既可以通过对象来访问,也可以通过类来访问,还可以通过对象指针来访问,如:
stu::m_total = 10;
stu s1(1,2);
s1.m_total = 10;
stu* p = new stu(3,4);
p->m_total = 10;
demo如下:
#include <iostream>
#include <string.h>
using namespace std;
class stu
{
private:
char *m_name;
int m_age;
static int m_total;
public:
stu(char *name, int age)
{
m_age = age;
m_name = new char[20];
strcpy(m_name,name);
m_total++;
}
stu(const stu &obj)
{
m_age = obj.m_age;
m_name = new char[20];
strcpy(m_name, obj.m_name);
m_total++;
}
void show()
{
cout << m_name << "的年龄是" << m_age << "," << "当前共有" << m_total << "名学生"<< endl;
}
};
int stu::m_total = 0;
int main()
{
(new stu("张三",10))->show();
(new stu("李四",11))->show();
(new stu("王五",12))->show();
return 0;
}
运行结果:
类中的静态成员函数:
- 只能访问静态成员变量;(普通成员函数可以访问所有成员)
- 可以访问:a.所在类的static成员数据; b.全局变量; c.常量; d.外部全局函数
- static成员函数不可以声明为const;
- 静态函数可以通过类调用(一般都是以该方式),也可以通过对象来条用;
如:
class test
{
public:
static void print()
{
}
};
test::print();