C++中的static类成员

在写程序是经常会遇到这种情况:需要统计某一个类的所有对象实例的个数。一个比较简单的方法是使用一个全局的变量,但是其缺点也是显而易见的。使用static成员可以很好的解决这个问题。相对与使用全局变量使用static成员有以下优势

1) static成员是在类的作用域内,很好的避免了和其他全局变量重名的问题。

2)可以实现封装,static成员在访问控制上和其他的成员一样可以为private

2)可以很容易的看出变量的含义,和类的关联。是一种比较好的代码风格。

 

在C++中定义和使用static成员与在Java和C#中有较大的区别。本人已经遇到过很多错误,这里总结下用法:

一、static成员的声明和定义

static成员的声明在class类定义体里

示例:

1   class TestClass
2   {
3         private:
4              static int itemCount;
5              static int initItemCount();
6   };

 

如果仅这样声明就去调用static成员,一定会遇到undefined 的错误,static成员的定义需要在类定义的外部:

1 int TestClass::itemCount = initItemCount(); 

在定义是不需要在加static关键字。static成员函数的定义和成员变量定义的规则是一样的,这里不再写出来了。

需要注意的是不能在static成员变量声明的时候对其初始化。

 

二、 使用static成员

在类的内部可以直接使用static成员:

复制代码
1 class TestClass
2 {
3        public:
4               TestClass();
          ~TestClass();
5               static int getItemCount();
6        private:
7               static int itemCount;
8               static int initItemCount();
9 };
复制代码
复制代码
 1 TestClass::TestClass()
 2 {
 3      itemCount++;
 4 }
 5 
 6 int TestClass::itemCount = initItemCount();
 7 
 8 int TestClass::initItemCount()
 9 {
10      return 0;
11 }
12 
13 TestClass::~TestClass()
14 {
15       itemCount--;
16 }
复制代码

在类的外部调用static成员:

复制代码
 1 #include <iostream>
 2 #include "TestClass.h"
 3 int main()
 4 {
 5      TestClass t;
 6      TestClass *pt = &t;
 7      t.initItemCount();
 8      pt->initItemCount();
 9      TestClass::initItemCount();
10      return 0;
11 }
复制代码

三、const static成员变量

const static 成员变量必须在声明的同时对其进行初始化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值