C++ 类的静态成员和静态成员函数

我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。静态成员在类的所有对象中是共享的。

先上代码,如何声明,定义静态变量,使用

// **************  XXXX.h   begin
#include <iostream>
 
using namespace std;
 
class Box
{
   public:
      //静态变量
      static int objectCount;
      // 构造函数定义。重点是静态变量的使用,函数的定义不应该写在.h里,大家不要这样写
      Box(double l=2.0, double b=2.0, double h=2.0)
      {
         cout <<"Constructor called." << endl;
         length = l;
         breadth = b;
         height = h;
         // 每次创建对象时增加 1
         objectCount++;
      }
      double Volume()
      {
         return length * breadth * height;
      }
      static int getCount()
      {
         return objectCount;
      }
   private:
      double length;     // 长度
      double breadth;    // 宽度
      double height;     // 高度
};

// **************  XXXX.h   end

// **************  XXXX.cpp   begin
// 初始化类 Box 的静态成员
int Box::objectCount = 0;

.....
// **************  XXXX.cpp   end
 


int main(void)
{
  
   // 在创建对象之前输出对象的总数
   cout << "Inital Stage Count: " << Box::getCount() << endl;
 
   Box Box1(3.3, 1.2, 1.5);    // 声明 box1
   Box Box2(8.5, 6.0, 2.0);    // 声明 box2
 
   // 在创建对象之后输出对象的总数
   cout << "Final Stage Count: " << Box::getCount() << endl;
   cout << "Final Stage Count: " << Box::objectCount << endl;
 
   return 0;
}

静态变量的声明放在.h,定义放在.cpp文件

静态成员变量在类中仅仅是声明,没有定义,之所以要在类的外面定义,实际上是给静态成员变量分配内存。如果不加定义就会报错,初始化是赋一个初始值,而定义是分配内存。

 1、静态数据成员的声明,在前面加关键字static。 

static int objectCount;

 2、静态成员的定义和初始化,格式如下:

    <数据类型><类名>::<静态数据成员名>=<值>  //静态变量的初始化

int Box::objectCount = 0;

int Box::objectCount ;  //只定义不初始化

注意:定义放在.cpp文件。

3、使用

(1)类内的使用方法和普通全局变量一样

(2)类外 

<类名>::<静态成员名> ;

4、静态成员函数

如果把函数成员声明为静态的,就可以把函数与类的任何特定对象独立开来。静态成员函数即使在类对象不存在的情况下也能被调用,静态函数只要使用类名加范围解析运算符 :: 就可以访问。

静态成员函数只能访问静态成员数据、其他静态成员函数和类外部的其他函数。

具体请看:http://www.runoob.com/cplusplus/cpp-static-members.html

总结:静态成员变量和静态函数和java一样,只是静态成员变量的定义和初始化要放在cpp中

还有c++类中的全局变量的初始化,无论是静态还是普通都不要在类中进行初始化。

参考文章2:

https://www.cnblogs.com/ppgeneve/p/5091794.html

猜你喜欢

转载自blog.csdn.net/tantion/article/details/86469369