类成员:
成员属于类,不属于类的对象。与之相对的是对象成员/实例成员,是属于对象的成员。
关键字static:
使用关键字static来创建一个类成员。类数据成员与类本身相关,与任何类对象无关。
声明:
class C {
public:
static unsigned getN() {return n;}
private:
static unsigned n;
};
类成员与对象成员的异同示例:
类数据成员必须在类内用static进行声明,且必须在类外定义。定义时可以指定初值,默认是0.
class C {
public:
static unsigned getN() {return n;}
private:
static unsigned n;
};
unsigned C::n = 0; //define
(将数据成员设置为static不会改变其对应的sizeof(对象或类型所占的内存字节数))
static成员函数:类成员函数
静态成员函数只能访问其他的静态数据成员;非静态成员函数可以访问static或非static成员.
static成员函数可以是inline或非inline.
对于static数据成员和static成员函数的访问方式:通过对象访问,或者直接通过类访问.
class C {
public:
static int p;
static void cmath();
};
int main() {
C c;
//通过对象访问
c.cmath();
int x1 = c.p;
//通过类访问
C::cmath();
int x2 = C::p;
}
成员函数内部的静态变量:
将成员函数内的某个局部变量x定义为static型,该类的所有对象调用该函数时共享此变量x;不同对象在访问该函数时访问同一个x.对于非静态局部变量,每个对象都各自拥有一个变量x.
———————————2021-11-05-18:32———————————