【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. 这个对象会被绑定到该成员函数的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
}
//调用方式
if(Triangular::is_elem(8))
{
	//...
}//而非if(is_elem(8))
//声明
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;
};
//最前头方无需再加关键字static
void Triangular::gen_elems_to_value(int value)
{
	//...
}

你可能感兴趣的:(C++基础,c++,开发语言,笔记)