• 【C++】class的设计与使用(五)静态类成员


    举例静态类成员

    class Triangular{
    public:
    	//...
    private:
    	static vector<int> _elems;
    	//私有成员的vector容器定义成静态类型的,也就是静态类成员
    
    //如在Triangular.cpp里写:
    //名称前必须加上类作用域运算符
    vector<int>Triangular::_elems;
    //为它指定初值
    int Triangular::_initial_size = 8;
    
    //在类成员函数里访问静态数据成员,同访问一般数据成员
    if(_elems.size()<elem_cnt)
    {
    	gen_elements(elem_cnt);
    }
    
    //const的静态数据成员,须在声明时候为它指定初值
    class intBuffer{
    public:
    	//...
    private:
    	static const int _buf_Size = 1024; //ok
    	int _buffer[_buf_size]; //ok
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    静态成员函数

    1. 一般情形下,成员函数必须通过其类的某个对象来调用;
    2. 这个对象会被绑定到该成员函数的this指针;
    3. 通过存储于每个类对象中的this指针,成员函数才能够访问存储于每个类对象中的非静态数据成员,即通过this指针可以访问类私有成员;
    • 静态成员函数的操作与任何对象都没有关联,所以可以很方便的用一般自定义函数的方式来调用,但必须加类作用域运算符
    • “静态成员函数”可以在“与任何对象都无关联”的情形下被调用;
    • 成员函数只有在“不访问任何非静态成员”的条件下才能被声明为static,声明方式是添加关键字static
    • 当我们在class主体外部进行成员函数的定义的时候,如果声明加了static,定义时就不用再加static了。
    bool Triangular::
    is_elem(int value)
    {
    	if(!_elems.size()||_elems[_slems.size()-1] < value)
    	{
    		gen_elems_to_value(value);
    	}
    	
    	vector<int>::iterator found_it;
    	vector<int>::iterator end_it=_elems.end();
    	
    	found_it = find(_elems.begin(), end_it, value);
    	return found_it != end_it;
    	//巧妙的bool表达式,因为这个类成员函数返回类型是bool类型
    	//所以通过这样的关系运算符判断,可得知return true还是false
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    //调用方式
    if(Triangular::is_elem(8))
    {
    	//...
    }//而非if(is_elem(8))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    //声明
    class Triangular{
    public:
    	static bool is_elem(int);
    	static void gen_elemnts(int length);
    	static void gen_elems_to_value(int value);
    
    private:
    	static const int _max_elems = 1024;
    	static vector<int> _elems;
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    //最前头方无需再加关键字static
    void Triangular::gen_elems_to_value(int value)
    {
    	//...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    OpenSign 开源 PDF 电子签名解决方案
    一文读懂Llama 2(从原理到实战)
    springboot+电影售票小程序 毕业设计-附源码201532
    Telerik UI 2022 R2 SP1 Retail-Not Crack
    【GitHub免密拉取代码】
    提高排名的 15 个基本 SEO 技巧
    Appium问题及解决:打开Appium可视化界面,点击搜索按钮,提示inspectormoved
    Windows安装Node.js
    vue动态修改css样式
    Linux下Nginx的安装和配置
  • 原文地址:https://blog.csdn.net/weixin_49347928/article/details/133363640