龙空技术网

C++|独立于任何具体对象的静态成员(成员数据与对象)

小智雅汇 161

前言:

现时各位老铁们对“静态数据成员是类的所有对象共享的数据吗”大概比较关心,你们都需要学习一些“静态数据成员是类的所有对象共享的数据吗”的相关知识。那么小编也在网络上收集了一些对于“静态数据成员是类的所有对象共享的数据吗””的相关文章,希望朋友们能喜欢,兄弟们快快来学习一下吧!

可以将类的数据成员和函数成员声明为static.

1 类的静态数据成员

无论创建多少个对象,每个静态类成员都只有一个供所有类实例共享的实例。静态数据成员只能定义一次。

静态数据成员的用途之一是统计实际存在多少个对象,实现此用途需要在类定义外部进行这个静态数据成员的初始化。

2 类的静态函数成员

静态函数成员没有this指针,独立于本类的任何具体对象。

具体细节看实例:

// Using a static member to count objects#include <iostream>using std::cout;using std::endl;class CBox // Class definition at global scope{public:	static int objectCount; // 声明静态数据成员		// Constructor definition	explicit CBox(double lv, double wv = 1.0, double hv = 1.0) 	{		double m_Length = lv, m_Width = wv, m_Height = hv;		cout << "Constructor called." << endl;		objectCount++;	}		CBox() // Default constructor	{		cout << "Default constructor called." << endl;		m_Length = m_Width = m_Height = 1.0;		objectCount++;	}		// Function to calculate the volume of a box	double volume() const	{		return m_Length*m_Width*m_Height;	}	static void afun()	//定义静态成员函数	{		objectCount *=10; //静态成员函数只能访问静态数据成员	}private:	double m_Length; // Length of a box in inches	double m_Width; // Width of a box in inches	double m_Height; // Height of a box in inches};int CBox::objectCount=0; // Initialize static member of CBox classint main(){	CBox boxes[5]; // Array of CBox objects defined	CBox cigar(8.0, 5.0, 1.0); // Declare cigar box		cout << "Number of objects (accessed through class) = "		<< CBox::objectCount << endl;		cout << "Number of objects (accessed through object) = "		<< boxes[2].objectCount << endl;	CBox::afun();	cout << CBox::objectCount << endl;	std::cin.get();	return 0;}运行结果:Default constructor called.Default constructor called.Default constructor called.Default constructor called.Default constructor called.Constructor called.Number of objects (accessed through class) = 6Number of objects (accessed through object) = 660

-End-

标签: #静态数据成员是类的所有对象共享的数据吗