[C/C++]: C++ Static Property

来源:互联网 发布:日本拉面的做法知乎 编辑:程序博客网 时间:2024/05/29 17:49

1.静态成员,static member

(1).类体系中的全局变量,体系内的所有类共享,遵循public/protected/private访问规则。

(2).类内声明,类外定义和初始化。

// static member testclass base {public:static int _staticVal; // declare };int base::_staticVal = 0;  // define and initializedint main(){base baseObject;}

(3).可以成为成员函数的默认参数,普通数据成员不行。

// static member testclass base {public:void setValue(int vala = _staticVal/*, int valb = _nonstaticVal */) {_vala = vala;//_valb = valb;}private:static int _staticVal;// int _nonstaticVal;int _vala;// int _valb;};int base::_staticVal = 0;int main(){base baseObject;}

(4).静态数据成员可以是所属类的类型,普通数据成员不行。

// static member testclass base {public:base() {_val = 0;}static base _staticVal; // okint _val;  // ok//base _val; // error};base baseObject;base base::_staticVal = baseObject;int main(){base baseObject;}

(5).冠以前缀mutable的数据成员或者static member,可以在const method当中被改变。

// static member testclass base {public:base() {_i = 0;_val = 0;}mutable int _i;static int _staticVal;int _val;void test() const {_i++; // ok_staticVal++; // ok//_val++; // error}};int base::_staticVal = 0;int main(){base baseObject;}

2.静态成员函数,static method

(1).可以用普通函数指针操作,成员函数需要用类成员函数指针操作。

// static method testclass base {public:static void setValue(int val) { };void getValue(void) { };private:static int _staticVal;int _val;};int base::_staticVal = 0;int main(){base baseObject;void (*staticFunPointer)(int) = &base::setValue; // ok// void (*normalFunPointer)(void) = baseObject.getValue; // errorvoid (base::*normalFunPointer)(void) = &base::getValue; // ok}
(2).不能同时声明为const,virtual,volatile。

// static method testclass base {public:static void setValue(int val) { };//static void setValue(int val) const { }; // error//virtual static void setValue(int val) { }; // error//static void setValue(int val) volatile { }; // errorvoid getValue(void) { };private:static int _staticVal;int _val;};int base::_staticVal = 0;int main(){base baseObject;}

(3).不能调用类的非静态成员,无this指针。

// static method testclass base {public:static void setValue(int val) { // _val = val; // error_staticVal = val; // ok};private:static int _staticVal;int _val;};int base::_staticVal = 0;int main(){base baseObject;}

common attribute:
无须创建任何对象就可以访问类的static property。
原创粉丝点击