非常感谢您能参观我的博客,有什么想法请留言,必回。
一 · 静态成员
我们知道全局变量能够实现数据共享,如果在多个程序文件中有多个函数,每一个函数中都可以来改变全局变量的值,但是这样做是不安全的,如不小心改错就会导致程序崩溃,因此在实际运用中很少用到全局变量。
但是有时候我们就是要用到多个对象之间实现数据共享,除了全局变量,就是我们今天要提到的静态成员。
1.1 静态数据成员
class Person
{
private:
char* _name;
static char* _gender; //把_gender定义为静态数据成员
int _age;
}
静态数据成员是一个特殊的数据成员,以static开头。如果希望个对象的数据成员的值是一样的,就可以把它定义为静态数据成员。声明为静态数据成员有个好处就是它只占用一分内存空间,而不是每个对象都为它留下一块空间。
对于静态成员函数作以下几点说明:
⑴前面说过,如果只申明类而未定义对象,则类的一般数据成员是不占空间的,只有在定义对象时,才会为对象的数据成员分配空间。但是静态数据成员不属于某一个对象,在为对象所分配的空间中不包括静态数据成员所占的空间,它是在对象之外单独开辟空间,只要定义了静态成员变量,即使不定义对象,也会为其分配空间还能被引用。
⑵静态数据成员既然不会随着对象的建立而分配空间,那么自然也不会随着对象的撤销而释放。静态数据成员是在程序开始运行时被分配空间,到程序结束时才会释放空间。
⑶静态数据成员只能在类外进行初始化。
char* Person::_gender ="man"
要注意的是不能用参数初始化表来对静态数据成员初始化:
⑷静态数据成员既可以通过对象名引用还可以通过类名引用:
class Person
{
public:
Person(char* name, char* gender, int age)
:_name(name)
, _age(age)
{}
static char* _gender;
private:
char* _name;
int _age;
};
char* Person::_gender = "man";
int main()
{
Person p("Peter", "man", 18);
cout << Person::_gender << endl;
cout << p._gender << endl;
return 0;
}
如果静态数据成