C++类的静态变量成员和静态成员函数的使用
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;
- }
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;
- }