当前位置:   article > 正文

C++之静态成员变量_c++ 静态成员变量

c++ 静态成员变量

一、静态成员变量

1)static修饰的静态成员

静态成员变量静态成员函数

静态成员变量:

1、static声明为静态的,称为静态成员,不管这个类创建了多少对象,静态成员只有一个拷贝,但是类的其他所有成员共享这个拷贝。静态对象属于类,不属于对象。

2、静态变量,是在编译阶段就分配好空间,对象还没创建的时候就有了空间。

3、静态成员变量必须在类中声明,类外定义定义的时候不用加static

案例1:

  1. class data{
  2. public:
  3. //类内声明
  4. static int num;
  5. };
  6. //类外定义
  7. int data::num =10;
  8. void test04()
  9. {
  10. //一开始实例化一个对象的到num的值
  11. data ob1 ;
  12. cout<<ob1.num<<endl;
  13. //再实例化一个对象,去修改num的值
  14. data ob2;
  15. ob2.num = 20;
  16. //打印两个值,发现两个对象的num的值都一样,说明共享num,以及num是就近原则。
  17. cout<<ob2.num<<endl;
  18. cout<<ob1.num<<endl;
  19. }

运行:

 静态成员函数:

1.属于类不属于对象,大家共享它。这里使用静态成员函数去访问data就可以不实例化成员去访问data函数,静态函数不能操作非静态数据,非静态函数也能访问静态数据

案例2、

  1. class data{
  2. public:
  3. int inode;
  4. static int num;
  5. static int getnum(void)
  6. {
  7. return num;
  8. }
  9. int getnum1(void)
  10. {
  11. return num;
  12. }
  13. };
  14. int data::num =10;
  15. void test04()
  16. {
  17. //不需要实例化对象去接num值
  18. cout<<data::getnum()<<endl;
  19. data ob1 ;
  20. ob1.num = 200;
  21. //非静态成员函数也能操作静态成员变量
  22. cout<<ob1.getnum1()<<endl;
  23. //静态成员函数只能操作静态成员变量
  24. cout<<data::getnum()<<endl;
  25. }

2)const修饰静态成员变量

既要实现共享(static),又要实现不能修改(const),static前面加上const,定义的时候也要加哦。

  1. #include <iostream>
  2. using namespace std;
  3. class DATA{
  4. public:
  5. const static int num;
  6. };
  7. const int DATA::num = 100;
  8. int main()
  9. {
  10. DATA ob;
  11. ob.num = 300;//err ,const修饰,不准修改
  12. }

综合案例1:使用static 统计实例化的对象数

  1. class data{
  2. public:
  3. int inode;
  4. static int num;
  5. static int setnum(int x)
  6. {
  7. return num;
  8. }
  9. data()
  10. {
  11. inode=0;
  12. num++;
  13. }
  14. data(int a )
  15. {
  16. this->inode = a;
  17. num++;
  18. }
  19. data(const data&ob)
  20. {
  21. num++;
  22. this->inode = ob.inode;
  23. }
  24. ~data(){};
  25. static int getnum(void)
  26. {
  27. return num;
  28. }
  29. };
  30. int data::num =0;
  31. void test04()
  32. {
  33. data ob1,ob2;
  34. data ob3;
  35. data ob4(100);
  36. data bo5 = ob4;
  37. cout<<"对象的个数是:"<<data::getnum()<<endl;
  38. }

运行结果

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号