概念
声明为static的类成员称为类的静态成员,用static修饰的成员变量称为静态成员变量,用static修饰的函数称为静态成员函数。
特性
1)静态成员为所有类对象所共享,不属于某个具体的实例;
2)静态成员变量要在类外定义,定义时不加static关键字;
3)访问静态成员的方式:类名::静态成员;
4)静态成员函数没有隐藏的this指针,不能访问任何非静态成员;
5)静态成员和类的普通成员一样,有public、protected、private访问级别,有返回值,可被const修饰。
6)静态成员变量在程序内部位于全局数据区
统计当前对象的个数的代码:
#include <iostream>
#include <string>
using namespace std;
class test{
private:
static int m_value1;//定义私有类的静态成员变量
public:
static int m_value2;//定义私有类的静态成员变量
public:
test()
{
m_value1++;
m_value2++;
}
int getValue()//定义类的静态成员函数
{
return m_value1;
}
};
int test::m_value1 = 0; //类的静态成员变量需要在类外分配内存空间
int test::m_value2 = 0; //类的静态成员变量需要在类外分配内存空间
int main(){
test t1;
test t2;
test t3;
cout << "test::m_value2 = " << test::m_value2 << endl; //通过类名直接调用公有静态成员变量,获取对象个数
cout << "t3.m_value2 = " << t3.m_value2 << endl; //通过对象名名直接调用公有静态成员变量
cout << "t3.getValue() = " << t3.getValue() << endl; //通过对象名调用普通函数获取对象个数
system("pause");
}
以上代码,有2个不妥之处
1、类名或对象名能直接访问成员变量,也就是说成员变量能直接被外界修改
2、我们使用了一个成员函数来获取当前的对象个数,看似没问题,但是必须要定义对象,通过对象去调用,但有时候我们不想定义对象,也能使用类中的成员函数,这就是我们要说的类的静态成员函数。
代码:
#include <iostream>
#include <string>
using namespace std;
class test{
private:
static int m_value;//定义私有类的静态成员变量
public:
test()
{
m_value++;
}
static int getValue()//定义类的静态成员函数
{
return m_value;
}
};
int test::m_value = 0;//类的静态成员变量需要在类外分配内存空间
原文链接:https://blog.csdn.net/lms1008611/article/details/81408236