C++ static与类学习笔记

1.静态成员变量:加上static关键字的成员变量

class sheep {
public:
   static int number;
};

定义一个sheep的类,里面是sheep的数量,这里我设置成静态成员变量。静态成员变量需要注意的点如下:

  1. 类似于全局变量,他的存储位置是静态存储区。
  2. 不管我定义多少个这个类的对象,该成员变量独有一份。
  3. 必须初始化;初始化要在类外且不加static关键字。
    #include <iostream>
    using namespace std;
    class sheep {
    public:
       static int number;
    };
    int sheep::number = 0;//必须初始化;初始化要在类外且不加static关键字
    int main() {
        sheep a1,a2,a3;
        a1.number = 1;
        a2.number = 2;
        a3.number = 3;
        cout << a1.number<< endl;
        cout << a2.number << endl;
        cout << a3.number << endl;
        return 0;
    }
    

    结果:

     可以看出,无论我定义了多少个对象,每个对象又改了number,所有对象的number值都和最后一次修改一致。

  • 可以使用 类名::静态成员变量 调用
    #include <iostream>
    #include<Windows.h>
    using namespace std;
    class sheep {
    public:
       static int number;
    };
    int sheep::number = 0;//必须初始化;初始化要在类外且不加static关键字
    int main() {
        system("color A1");//改个控制台背景前景颜色,可以忽略
        cout << sheep::number<< endl;
        return 0;
    }

2.静态成员函数:加上static关键字的成员函数

  1. 与静态成员变量相似,静态成员函数可以使用 类名:静态成员函数名调用
  2. 只与类有关和对象无关,也就没有this指针
  3. 因为可以直接类名:静态成员函数名调用,也就可以不创建对象,因此静态成员函数里面不能调用非静态成员变量/函数
  4. 也不能定义为虚函数,因为虚函数是父类指针指向子类对象,和对象有关,不行。
  5. 没有构造函数和析构函数,因为这两个都是和对象有关
    #include <iostream>
    #include<Windows.h>
    using namespace std;
    class sheep {
    public:
       static int number;
       static void mie() {
           cout << number;//可以调用静态成员变量
       }
       static void eat() {
           mie();//可以调用静态成员函数
       }
    };
    int sheep::number = 0;//必须初始化;初始化要在类外且不加static关键字
    int main() {
        system("color A1");//改个控制台背景前景颜色,可以忽略
        cout << sheep::number<< endl;
        return 0;}

3.应用

假如我需要数一下sheep的个数,定义一个sheep,自动number+1,

为了不让让别人对我的number随意修改,设置成员变量名为:private:static int number;让number做个独一无二的计数器吧

设置构造函数,定义一个sheep number++;设置析构函数,sheep死了,销毁掉,number--;

#include <iostream>
#include<Windows.h>
using namespace std;
class sheep {
private:
   static int m_number;
public:
    sheep() {
       m_number++;
   }
   ~sheep() {
       m_number--;
   }
   static int result() {
       return m_number;
   }
};
int sheep::m_number = 0;//必须初始化;初始化要在类外且不加static关键字
sheep g_sheep;
int main() {
    system("color A1");//改个控制台背景前景颜色,可以忽略
    sheep aa;
    sheep *p=new sheep();
    cout << sheep::result()<< endl;
    return 0;
}

 结果:输出3

4.单例模式,一种static的特殊用法,保证某个类只创建一个对象

#include <iostream>
#include<Windows.h>
using namespace std;
class sheep {
private:
    sheep() {};
    static sheep* p;
public:
     static sheep* share(){
       if (p == NULL) {
           p = new sheep(); 
       }
       return p;
     }
    void run() {
        cout << "run";
    }
};
sheep* sheep::p=NULL;

int main() {
    system("color A1");//改个控制台背景前景颜色,可以忽略
    sheep* s;
    s = sheep::share();
    sheep* s1;
    s1 = sheep::share();
    cout << s<< endl;
    cout << s1;
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值