C++ 中的 成员变量 是指定义在 类 的内部而且在方法的外部的变量,C++ 中的成员变量可以有 0 个或者多个。C++ 中的静态成员是指使用 static 修饰的成员变量,C++ 中的静态成员同样可以有 0 个或者多个。
属性 | 调用方法 |
---|---|
静态成员 | 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;
}
程序运行后,控制台输出如下:
我们创建了一个类 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;
}
程序运行后,控制台输出如下:
我们在类里面定义了一个静态成员 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;
}
程序运行后,控制台输出如下:
这次,我们修改了类的成员变量 name 的值,我们发现,我们修改了对象 stu1 的 name 的值并未影响 stu 的 name 的值。
C++ 的静态成员变量调用方法有两种,一种是通过 “类名::属性” 的方法,另一种是通过 “对象.属性” 的方法来调用。C++ 的普通成员变量只能通过 “对象.属性” 的方法来调用。
静态成员变量就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本。普通成员变量为实例对象自己所私有。