【C++】类中静态成员的声明、初始化
有参考大佬 零点零一 的文章: https://blog.csdn.net/thanklife/article/details/78476737
类中静态成员的声明
类中的静态数据成员是局部静态变量,类中的数据成员被声明为静态的之后,其存储位置从原来的栈中存放改为静态存储区。但是局部静态变量在离开作用域之后,并没有被销毁,而是仍然驻留在内存当中,直到程序结束,只不过我们不能再对他进行访问。
class Staff
{
private:
static int count;
}
初始化
类的静态数据成员只能在类外进行初始化,因为静态变量是公共的,不依赖于某个对象,是独立的。
初始化方式如下:
int Staff::count = 0;
静态数据成员值的改变
如上的例子中,count记录的为员工数,可以在构造函数中让count自增1:
class Staff
{
private:
static int count;
public:
Staff()
{ count++; }
}
这样,在每声明一个对象,count的值就+1,就达到了统计员工数的功能。
完整例子
编译环境:Visual Studio 2017.
源代码:
#include <iostream>
#include <string>
#include <Windows.h>
using namespace std;
int t = 1;
class Staff
{
protected:
int code;
string name;
static int count;
public:
Staff(string n) //有问题
{
name = n;
code = t++;
count++;
}
void SetName(string n)
{
name = n;
}
string GetName()
{
return name;
}
int GetCode()
{
return code;
}
int static GetStaffCount()
{
return count;
}
};
int Staff::count = 0;
class Teacher :virtual public Staff
{
protected:
string subject;
public:
Teacher(string n, string s) :Staff(n), subject(s) {}
void SetSubject(string s)
{
subject = s;
}
string GetSubject()
{
return subject;
}
};
class Officer :virtual public Staff
{
protected:
string work;
public:
Officer(string n, string w) :Staff(n), work(w) {}
void SetWork(string w)
{
work = w;
}
string GetWork()
{
return work;
}
};
class Teacher_Officer :public Teacher, public Officer
{
public:
Teacher_Officer(string n, string s, string w) :Staff(n), Teacher(n, s), Officer(n, w) {}
};
int main()
{
Teacher t1("孔子", "儒家文学"); //创建教学类员工t1
Teacher t2("公输班", "建筑学");
Officer o1("端木赐", "财务科长"); //创建教辅类员工o1
Teacher_Officer to3("颜回", "儒家文学", "副院长");//创建教师教辅类员工to3
cout << "共有教职工" << Staff::GetStaffCount() << "人" << endl;
cout << t1.GetCode() << ", " << t1.GetName() << ", " << t1.GetSubject() << endl;
cout << t2.GetCode() << ", " << t2.GetName() << ", " << t2.GetSubject() << endl;
cout << o1.GetCode() << ", " << o1.GetName() << ", " << o1.GetWork() << endl;
cout << to3.GetCode() << ", " << to3.GetName() << ", " << to3.GetSubject() << ", " << to3.GetWork() << endl;
system("pause");
return 0;
}
输出结果:
共有教职工4人
1, 孔子, 儒家文学
2, 公输班, 建筑学
3, 端木赐, 财务科长
4, 颜回, 儒家文学, 副院长
请按任意键继续. . .