C++静态成员变量

C++静态成员变量教程

C++ 中, 的静态成员可以实现多个 对象 之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。因此,静态成员是类的所有对象中共享的成员,而不是某个对象的成员。

使用静态数据成员可以节省内存,因为它是所有对象所公有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象共用。

静态数据成员的值对每个对象都是一样,但它的值是可以更新的。只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值,这样可以提高时间效率。

我们在访问类的静态成员时,既可以使用类名来访问也可以使用对象名来访问。

静态数据成员详解

定义

静态数据成员在定义或说明时前面加 关键字 static。

语法

class ClassName { public: static Type paramter; };

参数

参数 描述
static 定义静态成员使用的关键字。
Type 静态成员类型名。
paramter 静态成员变量名。

说明

我们在类 ClassName 中,定义了一个静态成员 paramter,其类型为 Type。

技术细节

静态成员在定义后,必须要进行初始化。

静态成员初始化

定义

静态成员在定义后,必须要进行初始化。

语法

Type ClassName::paramter=value;

参数

参数 描述
Type 静态成员类型名。
ClassName 静态成员类名。
paramter 静态成员变量名。
value 静态成员需要初始化的值。

技术细节

静态成员初始化在类体外进行,而前面不加 static,(这点需要注意)以免与一般静态变量或对象相混淆。且初始化时不加该成员的访问权限控制符 private,public 等。

初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员。

静态成员引用

定义

静态成员的引用可以使用类名或者对象名引用。

语法

ClassName::paramter

参数

参数 描述
ClassName 静态成员类名。
paramter 静态成员变量名。

案例

静态成员变量调用

通过类名访问静态属性

#include <iostream> using namespace std; class Student { public: Student() { cout << "Call Student" << endl; } static string course; }; string Student::course = "C++"; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; cout << "Student::course = " << Student::course << endl; return 0; }

程序运行后,控制台输出如下:

07_C静态属性.png

我们创建了一个类 Student,接着,为该类添加了一个静态属性 score,并且,我们在类外面初始化了该类的静态成员,最后,我们可以直接使用 “Student::score” 的形式来访问静态属性。

静态成员变量

通过对象名访问静态属性

#include <iostream> using namespace std; class Student { public: Student() { } static string course; }; string Student::course = "C++"; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; Student stu; cout << "stu course = " << stu.course << endl; Student stu1; cout << "stu1 course = " << stu1.course << endl; stu1.course = "Python"; cout << "stu course = " << stu.course << endl; cout << "stu1 course = " << stu1.course << endl; return 0; }

程序运行后,控制台输出如下:

08_C静态属性.png

这次,我们使用了类的对象 stu 和 stu1 分别访问了类的静态成员,同时,我们使用对象 stu1 修改了静态属性 course 的值,最后,我们可以看到,stu 对象的 course 值和 stu1 对象的 course 值都被修改了。

因为,静态成员的值是所有对象所共有的。

C++静态成员变量总结

在 C++ 中,类的静态成员可以实现多个对象之间的数据共享,并且使用静态数据成员还不会破坏隐藏的原则,即保证了安全性。因此,静态成员是类的所有对象中共享的成员,而不是某个对象的成员。

使用静态数据成员可以节省内存,因为它是所有对象所公有的