#include <iostream>
using namespace std;
/*
* 规则:
* 1、static 变量:声明在类中,定义赋值在类外
* 2、const 变量:由于要进入符号表,在类中声明的时候就得赋值定义
* 3、const static:在类外赋值的时候去掉static关键字
* (1)某些类型:char,short,int,long可以选择方式1 or 2
* (2)某些类型:float、double 选择方式1,必须在类外赋值定义
* 4、static const:在类外赋值的时候去掉static关键字
* (1)某些类型:char,short,int,long可以选择方式1 or 2
* (2)某些类型:float、double 选择方式1,必须在类外赋值定义
*/
class A {
public:
const static int num1; // const static 第(1)种类型声明
const static int num2 = 2; // const static 第(2)种声明和初始化
const int num3 = 3;
static int num4;
const static float num5; // 只能在类外面初始化,数据类型限:float double
static const int num6 = 6; // 声明和初始化
static const float num7; // 声明
A():num3(3333)
{
// this->num3 = 6666666; 错误的方式
// 初始化列表可以覆盖const 类型的值。加了static不属于类,不可以构造函数初始化。
}
};
const int A::num1 = 1; // const static(1)类型定义并初始化
//const int A::num2 = 2222222; // 定义并初始化,和第10行二选一,数据类型限:char short int long
int A::num4 = 4;
const float A::num5 = 5; // 只能在类外面初始化,数据类型限:float double
const float A::num7 = 7; // 只能在类外面初始化,数据类型限:float double
int main()
{
cout << A::num1 << endl;
cout << A::num2 << endl;
A a;
cout << a.num3 << endl;
cout << A::num4 << endl;
cout << A::num5 << endl;
cout << A::num6 << endl;
cout << A::num7 << endl;
return 0;
}