静态成员(C++)

2.10 静态成员

  • C++为什么需要静态成员

    C语言中可以通过全局变量实现数据共享,在程序的任何位置都可以访问

    C++中希望某个类的多个对象实现数据共享,可以通过static建立一个被局限在类中使用的全局资源,该类型资源被称为静态成员。

  • 静态成员变量(可以理解为局限在类中使用的全局变量)

    被static修饰的成员变量即为静态成员变量

    class 类名{
        static 数据类型 变量名;//声明
    };
    数据类型 类名::变量名 = 初值;//定义和初始化
    

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    实例化对象时只实现非静态成员变量

    访问方式:

    • 类名::静态成员变量;
    • 对象.静态成员变量
    #include <iostream>
    using namespace std;
    
    class A{
    public:
    	static int m_a;//类名A 创建的对象共享此 静态成员变量
    	int m_b;
    
    	A(int data = 0) : m_b(data){}
    };
    
    int A::m_a = 10;//定义 并 初始化成员变量
    
    int main(void) {
    
    
    	cout << A::m_a << endl;
    	A a1;
    	cout << "A size() = " << sizeof(a1) << endl; //输出 A size() = 4
    	cout << a1.m_a << endl;
    
    	A a2;
    	cout << a2.m_a << endl;
    	return 0;
    }
    
  • 静态成员函数

    被static修饰的成员成员函数即为静态成员函数。

    class 类名{
    访问控制限定符:
        static 返回类型 函数名(形参表) {...}
    };
    

    注意:

    • 静态成员函数可以直接定义在类的内部,也可以定义在类的外部,这一点和普通的成员函数没有区别。
    • 静态成员函数没有this指针,也没有const属性,可以把静态函数理解为被限制在类中使用的全局函数。
    • 静态成员函数中只能访问静态成员,但是在非静态成员函数中既可以访问静态成员也可以访问非静态成员。
    • 静态成员函数和静态成员变量一样,也要受到类的访问控制限定符的约束。

    在类的外部访问静态成员函数

    • 类名::静态成员函数(实参表);
    • 对象.静态成员函数(实参表);
     #include <iostream>
    using namespace std;
    
    class A{
    public:
    	int m_data;
    	static int s_data;
    
    	A(int data = 0):m_data(data) {}
    
    	void func1(void) { // 编译器翻译了以后  void func1(A *this)
    		cout << m_data << endl; //可以访问 非静态成员变量
    		cout << s_data << endl; //可以访问 静态成员变量
    	}
    
    	static void func2() {
    		//cout << m_data << endl; //不可以访问 非静态成员变量
    		//cout << this->m_data << endl;   编译器翻译以后 有this指针
    		cout << s_data << endl; //只能访问 静态成员变量
    	}
    };
    
    int A::s_data = 100;
    
    int main(void) {
    
    	A::func2();
    	
    	A a;
    	a.func2();
    	a.func1(); //编译器翻译以后 a.func1(&a) 是传入地址
    
    	return 0;
    }
    
  • 14
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值