1. 在static成员函数中不能使用this指针。this指针是对象的地址,而static是类这个层次的,它不属于任何一个对象。
2. 即使没有实例化类的对象,static数据成员和成员函数仍然可以使用。
3. static成员的名字在类的作用域中,因此可以避免与其它类的成员或者全局对象名字冲突。
4. 可以实施封装,static成员可以是私有成员,而全局对象不可以。
5.通过阅读代码容易看出static成员是与特定类关联的,清晰的显示程序员的意图。
main.cpp
#include <iostream>
#include "martain.h"
using namespace::std;
void func()
{
Martain c; // count+1=3
int count = Martain::getCount();
cout << "count = " << count << endl;
// 类对象生命期结束,自动调用析构函数,count-1=2
}
int main()
{
int count = Martain::getCount();
cout << "count = " << count << endl; //0
Martain a; // 建立对象的同时,自动调用构造函数,count+1=1
count = Martain::getCount();
cout << "count = " << count << endl; //1
Martain b; // count+1=2
count = Martain::getCount();
cout << "count = " << count << endl; //2
func(); //3
count = Martain::getCount();
cout << "count = " << count << endl; //2
return 0;
}
martain.h
#ifndef MARTAIN_H_INCLUDED
#define MARTAIN_H_INCLUDED
class Martain
{
public:
Martain(); // 构造函数
~Martain(); // 析构函数
void fight();
void hide();
static int getCount();
private:
static int martainCount; // 定义类的静态成员变量
int m_bloodValue;
};
#endif // MARTAIN_H_INCLUDED
martain.cpp
#include <iostream>
#include "martain.h"
using namespace::std;
int Martain::martainCount = 0; // 初始化类的静态成员变量
Martain::Martain()
{
martainCount++;
}
Martain::~Martain()
{
martainCount--;
}
int Martain::getCount()
{
return martainCount;
}
void Martain::fight()
{
}
void Martain::hide()
{
}