C++基础之static关键字(2)--静态成员变量详解

本篇文章主要讲解C++基础中static关键字的静态成员变量并进行实例演示。

一.静态成员变量定义

类的成员变量被声明为static,意味着它为该类的所有实例共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见。

静态与非静态变量
静态成员:静态类中的成员加入static修饰符,即是静态成员。可以直接使用"类名.静态成员名"访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员函数不能访问非静态的成员,非静态成员函数可以直接访问类中静态的成员。

非静态成员:所有没有加static的成员都是非静态成员,当类被实例化之后,可以通过实例化的类名进行访问,非静态成员的生存期决定于该类的生存期,而静态成员则不存在生存期的概念,因为静态成员始终驻留在内存中。

二.实例演示静态成员变量

根据前面所讲,静态成员变量为该类的所有实例共享,那么,该类的所有实例对象都可以访问此静态成员变量。
Test.h

class student{
public:
    student(char* name, int age, float score);
public:
    static int total;  //静态成员变量
private:
    char* name;
    int age;
    float score;
};

Test.cpp

int student::total = 0;
student::student(char *name, int age, float score)
{
	total++;//操作静态成员变量,实现类之间的联系
	cout<<name<<"的年龄是"<<age<<",成绩是"<<score<<"(当前共有"<<total<<"名学生)"<<endl;
    
}
int main()
{
    student stu1("小明", 15, 90);
	student stu2("小红", 16, 94);
	student stu3("小李", 15, 91);
	return 0;
}

运行结果:
在这里插入图片描述
分析:
我们定义了一个学生类,其中记录了学生的姓名,年龄和成绩,然后定义了一个静态成员变量total,用来记录学生个数,可以发现,这个total是属于类所拥有的,我们每次实例化一个对象,total就会加1,这样就实现了不同实例对象间的联系。

注意:
1).一个类中可以有一个或多个静态成员变量,所有的对象都共享这些静态成员变量,都可以引用它。
2).static成员变量不随对象的创建而分配内存,也不随对象的销毁而释放内存。普通成员变量在对象创建时分配内存,在对象销毁时释放内存。
3).静态成员变量必须初始化,而且只能在类体外进行。

演示类的实例对象更改静态成员变量
Test.h

class student{
	static int variable;
};

Test.cpp

int student::variable = 0;
int main()
{
	student stu4;
	student stu5;
	cout<<stu4.variable<<endl;
	cout<<stu5.variable<<endl;
	stu4.variable=1;//修改静态成员变量
	cout<<stu4.variable<<endl;
	cout<<stu5.variable<<endl;
	return 0;
}

结果:
在这里插入图片描述
分析:
初始化静态成员变量为0,类的实例stu4和stu5都可以访问为0,其中stu4修改静态成员变量为1,那么stu5得到的值也会变为1。

也可以使用类名::静态成员变量的方法来访问静态成员变量(非静态成员变量不可)。

stu4.variable=1;//修改静态成员变量
cout<<student::variable<<endl;//使用类名::静态成员变量访问

结果:
在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/baidu_41191295/article/details/112492273
今日推荐