成员
常成员、常对象(C++推荐使用 const 而不用#define,mutable)
const 数据成员只在某个对象生存周期内是常量,而对于整个类而言却是可变的(static除外)
1.常数据成员(构造函数初始化表赋值)
class STU{
public:A():x(100){}const int x;
}
2.常成员函数
void func() const;
3.常对象
const STU a;
静态成员(属于类不属于对象)
1.静态成员的声明
static int x;
static const int x = 10;
2.静态数据成员初始化
static int STU::x = 10;//类之外的初始化
3.静态成员函数
static void func();//能访问静态成员
//调用方法
STU::func();
例(常成员、常对象)
#include <stdio.h>class STU{
public:STU(int data = 0):b(data){ //默认参数 = 0 b = data;printf("STU\n");}~STU(){printf("STU Bye!!!\n");}void class_print(void) const{printf("b = %d\n", b);}private:int a;const int b;
};int main(int argc, char const *argv[])
{STU x(10);x.class_print();STU y(100);y.class_print();STU z;z.class_print();return 0;
}
例(静态)
基于类不基于对象
#include <stdio.h>class STU{
public:void func1(){printf("func1\n");}static void func2(){ //无需创建对象也可以调用printf("func2\n");}static int data;
};int STU::data = 0;//一定类外初始化int main(int argc, char const *argv[])
{STU a;a.func1();a.func2();//STU::func1();//不能调用,因为不依附于对象,无staticSTU::func2();printf("data = %d\n", a.data);STU::data = 1000;printf("data = %d\n", a.data);//静态成员也可以改变return 0;
}