【C++】类中静态成员的声明、初始化

【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, 颜回, 儒家文学, 副院长
请按任意键继续. . .

猜你喜欢

转载自blog.csdn.net/liulimengtianxia/article/details/84555051