赞
踩
静态成员变量、静态成员函数
1、static声明为静态的,称为静态成员,不管这个类创建了多少对象,静态成员只有一个拷贝,但是类的其他所有成员共享这个拷贝。静态对象属于类,不属于对象。
2、静态变量,是在编译阶段就分配好空间,对象还没创建的时候就有了空间。
3、静态成员变量必须在类中声明,类外定义。定义的时候不用加static。
案例1:
- class data{
- public:
- //类内声明
- static int num;
- };
- //类外定义
- int data::num =10;
- void test04()
- {
- //一开始实例化一个对象的到num的值
- data ob1 ;
- cout<<ob1.num<<endl;
- //再实例化一个对象,去修改num的值
- data ob2;
- ob2.num = 20;
- //打印两个值,发现两个对象的num的值都一样,说明共享num,以及num是就近原则。
- cout<<ob2.num<<endl;
- cout<<ob1.num<<endl;
- }

运行:
1.属于类不属于对象,大家共享它。这里使用静态成员函数去访问data就可以不实例化成员去访问data函数,静态函数不能操作非静态数据,非静态函数也能访问静态数据
案例2、
- class data{
- public:
-
- int inode;
- static int num;
- static int getnum(void)
- {
- return num;
- }
- int getnum1(void)
- {
- return num;
- }
- };
- int data::num =10;
- void test04()
- {
- //不需要实例化对象去接num值
- cout<<data::getnum()<<endl;
-
- data ob1 ;
- ob1.num = 200;
-
- //非静态成员函数也能操作静态成员变量
- cout<<ob1.getnum1()<<endl;
- //静态成员函数只能操作静态成员变量
- cout<<data::getnum()<<endl;
-
- }

既要实现共享(static),又要实现不能修改(const),static前面加上const,定义的时候也要加哦。
- #include <iostream>
- using namespace std;
- class DATA{
- public:
- const static int num;
- };
- const int DATA::num = 100;
- int main()
- {
- DATA ob;
- ob.num = 300;//err ,const修饰,不准修改
- }
综合案例1:使用static 统计实例化的对象数
- class data{
- public:
-
- int inode;
- static int num;
- static int setnum(int x)
- {
- return num;
- }
- data()
- {
- inode=0;
- num++;
- }
- data(int a )
- {
- this->inode = a;
- num++;
-
-
- }
- data(const data&ob)
- {
- num++;
- this->inode = ob.inode;
- }
- ~data(){};
- static int getnum(void)
- {
- return num;
- }
-
- };
- int data::num =0;
- void test04()
- {
-
- data ob1,ob2;
- data ob3;
- data ob4(100);
- data bo5 = ob4;
- cout<<"对象的个数是:"<<data::getnum()<<endl;
-
- }

运行结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。