C++类的静态变量成员和静态成员函数的使用

来源:互联网 发布:如何做淘宝链接 编辑:程序博客网 时间:2024/05/24 02:29

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;}





原创粉丝点击