前言:
现时各位老铁们对“静态数据成员是类的所有对象共享的数据吗”大概比较关心,你们都需要学习一些“静态数据成员是类的所有对象共享的数据吗”的相关知识。那么小编也在网络上收集了一些对于“静态数据成员是类的所有对象共享的数据吗””的相关文章,希望朋友们能喜欢,兄弟们快快来学习一下吧!可以将类的数据成员和函数成员声明为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-
标签: #静态数据成员是类的所有对象共享的数据吗