C++的类模板中定义私有的静态数据成员

目录

1、实现方法

1)、定义一个类模板template

2)、定义一个模板类class CNode;

3)、定义一个模板类class CNet;

4)、分别定义每个模板的实例;

5)、每个实例中分别调用静态数据成员;

2、一个实现例源码

3、特别注意的事项:

4、总结: 


        在类模板中可以定义静态数据成员,类模板中的每个实例都可以有自己的静态数据成员,而不是所有的类模板实例共享静态数据成员。

1、实现方法

1)、定义一个类模板template <class Type>

        并在其模板类class CList中定义静态数据成员;

2)、定义一个模板类class CNode;

3)、定义一个模板类class CNet;

4)、分别定义每个模板的实例;

5)、每个实例中分别调用静态数据成员;

2、一个实现例源码

/*类模板的静态数据成员*/
#include <iostream>
using namespace std;
template <class Type>
//定义CList类
class CList		
{
private:
	/*Type *m_pHeader; 
	int   m_NodeSum; */
public:	
	static int m_ListValue;	//定义静态数据成员,不可以在类内初始化静态变量,须类外初始化
	/*CList()
	{
		m_pHeader = NULL;	
		m_NodeSum = 0;
	}*/
};
//定义CNode类
class CNode		
{
//public:
//	CNode *m_pNext=NULL;	//指针初始化,否则警告C26495
//	int   m_Data = {};		//初始化,否则警告C26495
//	CNode()
//	{
//		m_pNext = NULL;
//	}
};
//定义CNet类
class CNet		
{
//public:
//	CNet *m_pNext=NULL;		//指针初始化,否则警告C26495
//	char   m_Data = {};		//初始化,否则警告C26495
//	CNet()
//	{
//		m_pNext = NULL;
//	}
};
//定义类模板
template <class Type>
int CList<Type>::m_ListValue = 10;	//初始化静态数据成员,因为类型为Type,所以无论以后定义任何类型的实例,其初始值均为10
//main函数
int main(int argc, char* argv[])
{
	CList<CNode> nodelist;			//定义CList类的实例对象nodelist,数据类型是CNode
	cout << nodelist.m_ListValue << endl;//不重新赋值,默认执行初始化数值,只要重新复制后,就执行新值

	nodelist.m_ListValue = 2023;	//如果不重新赋值,只要是<CNode> 的实例,静态数据成员值不改变
	CList<CNet> netlist;			//定义CList类的实例对象netlist,数据类型是CNet
	netlist.m_ListValue = 520;
	cout<<"今年是:";
	cout<<nodelist.m_ListValue<< endl;
	cout<<"代表“我爱你”的数字是:";
	cout<<netlist.m_ListValue<<endl;

	CList<CNode> nodelist1;			//再次定义一个CNode类型的实例nodelist1,不重新赋值,测试其静态数据成员值不改变
	cout << nodelist1.m_ListValue << endl;

	CList<CNode> nodelist2;			//再次定义一个CNode类型的实例nodelist2,重新赋值,测试其静态数据成员值改变了
	nodelist2.m_ListValue = 2022;
	cout << nodelist2.m_ListValue << endl;

	CList<CNet> netlist1;			//同上
	cout << netlist1.m_ListValue << endl;

	return 0;
}
/*运行结果:
10
今年是:2023
代表“我爱你”的数字是:520
2023
2022
520	*/

3、特别注意的事项:

1)、int CList<Type>::m_ListValue = 10;    初始化静态数据成员,因为类型为Type,所以无论以后定义任何类型的实例,其初始值均为10;

2)、CList<CNode> nodelist1;   cout << nodelist1.m_ListValue << endl;  再次定义一个CNode类型的实例nodelist1,不重新赋值,测试其静态数据成员值不改变
3)、CList<CNode> nodelist2;    nodelist2.m_ListValue = 2022;   cout << nodelist2.m_ListValue << endl;   再次定义一个CNode类型的实例nodelist2,重新赋值,测试其静态数据成员值改变了; 

4、总结: 

        静态变量在类中,不属于实例对象,属于类所有;

        实例变量是某个对象的属性;

    

猜你喜欢

转载自blog.csdn.net/wenchm/article/details/131005525