1 类的静态成员变量
当类的一个成员变量被声明为static类型时,该成员变量就是类的静态变量,属于类的所有实例。也就是说类的静态变量是类的所有该类实例的全局变量。
静态成员变量的初始化,与其他变量的初始化很不一样,静态成员需要在类外初始化,形式如下:
<静态变量的类型> <类名> :: <类的静态成员变量名> <= 初始化值>
比如类Animal有私有静态成员
static int m_sCount;
则初始化方法为:
int Animal::m_sCount = 0;
显示初始化值为0,如果加上=赋值初值,则默认为0。
示例代码
#include <iostream>
class Animal
{
public:
Animal()
{
m_c = 0;
}
void add()
{
m_sCount++;
std::cout<<"Animal::add "<< m_sCount <<std::endl;
}
static void print()
{
std::cout<<"Animal::print "<< m_sCount<<std::endl;
}
private:
static int m_sCount;
int m_c;
};
int Animal::m_sCount = 0;
int main()
{
Animal animal[10];
int i = 0;
for(i = 0; i < 10; i++)
{
animal[i].add();
}
for(i = 0; i < 10; i++)
{
animal[i].print();
}
return 0;
}
运行结果:
2.类的静态成员函数
(1)静态成员函数中不能引用非静态成员
因为静态成员函数属于类的,不属于某个具体的对象,因此不能引用非静态成员(没有具体的内存呀)#include <iostream>
class Animal
{
public:
Animal()
{
m_c = 0;
}
void add()
{
m_sCount++;
std::cout<<"Animal::add "<< m_sCount <<std::endl;
}
static void print()
{
m_c = 0;
std::cout<<"Animal::print "<< m_sCount<<std::endl;
}
private:
static int m_sCount;
int m_c;
};
int Animal::m_sCount = 0;
int main()
{
Animal animal[10];
int i = 0;
for(i = 0; i < 10; i++)
{
animal[i].add();
}
for(i = 0; i < 10; i++)
{
animal[i].print();
}
return 0;
}
(2)可以使用 类名::静态函数名() 引用静态成员函数
因为静态成员函数属于所有对象共有,
但不能用::调用非静态成员函数。
#include <iostream>
class Animal
{
public:
Animal()
{
m_c = 0;
}
void add()
{
m_sCount++;
std::cout<<"Animal::add "<< m_sCount <<std::endl;
}
static void print()
{
//m_c = 0;
std::cout<<"Animal::print "<< m_sCount<<std::endl;
}
private:
static int m_sCount;
int m_c;
};
int Animal::m_sCount = 0;
int main()
{
Animal animal;
//Animal::add();
Animal::print();
return 0;
}