C++成员变量静态成员区别

C++成员变量与静态成员定义区别

C++ 中的 成员变量 是指定义在 的内部而且在方法的外部的变量,C++ 中的成员变量可以有 0 个或者多个。C++ 中的静态成员是指使用 static 修饰的成员变量,C++ 中的静态成员同样可以有 0 个或者多个。

C++成员变量静态成员调用区别

属性 调用方法
静态成员 C++ 的静态成员变量调用方法有两种,一种是通过 “类名::属性” 的方法,另一种是通过 “对象.属性” 的方法来调用。
成员变量 C++ 的普通成员变量只能通过 “对象.属性” 的方法来调用。

C++成员变量静态成员作用域区别

属性 作用域
静态成员 静态成员变量就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本。
成员变量 普通成员变量为实例对象自己所私有。

案例

静态成员调用

通过实例访问静态成员

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

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

11_C成员变量与静态成员.png

我们创建了一个类 Student,接着,为该类添加了一个成员变量 name,和一个静态成员 course。接着,我们创建了两个 Student 类的实例,并通过实例来调用静态成员和普通成员。

我们可以看到,类的普通成员变量我们只可以使用对象来访问,而类的静态成员我们既可以使用对象进行访问,也可以直接使用类名来访问。

静态成员是共用的

所有对象共用一个静态成员变量

#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 << "I am learing " << stu.course << endl; Student stu1; cout << "I am learing " << stu1.course << endl; stu1.course = "Python"; cout << "I am learing " << stu.course << endl; return 0; }

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

12_C成员变量与静态成员.png

我们在类里面定义了一个静态成员 course,接着,我们可以看到,我们修改了实例 stu1 的 course 静态属性,同时 stu 的静态属性也跟着一起发生了变化,因为,静态属性是所有对象所共有的。

非静态成员是私有的

每个对象的非静态成员都是私有的

#include <iostream> using namespace std; class Student { public: Student() { } string name; }; int main() { cout << "嗨客网(www.haicoder.net)\n" << endl; Student stu; stu.name = "HaiCoder"; cout << "I am " << stu.name << endl; Student stu1; stu1.name = "Jobs"; cout << "I am " << stu1.name << endl; stu1.name = "Gates"; cout << "I am " << stu.name << endl; return 0; }

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

13_C成员变量与静态成员.png

这次,我们修改了类的成员变量 name 的值,我们发现,我们修改了对象 stu1 的 name 的值并未影响 stu 的 name 的值。

C++成员变量静态成员区别总结

C++ 的静态成员变量调用方法有两种,一种是通过 “类名::属性” 的方法,另一种是通过 “对象.属性” 的方法来调用。C++ 的普通成员变量只能通过 “对象.属性” 的方法来调用。

静态成员变量就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本。普通成员变量为实例对象自己所私有。