初始化,宏定义,常函数和静态成员
初始化和赋值的区别
初始化:变量和对象产生的时候赋予一个值,伴随性质
赋值:产生之后赋予一个值,随意性质
数组的赋值只能单个赋值
int b[12];
b[0]=1;
b[1]=2
 引用和const一定要初始化
初始化列表
class CStu
{
public:
    int a;
    float f;
    //第一种
    CStu():a(12),f(12.23f)//初始化列表
    {
    }
    //第二种
    CStu(int b,float c):a(b),f(c)//初始化的顺序只和声明顺序有关,和书写顺序无关
    {
    }
    //第三种
    CStu():a(12),f(a)//成员间的初始化,f和a要一个类型
    {
    }
}
引用和const初始化
class CStu
{
public:
    int b;
    int &a;
    //第一种
    CStu(int c):a(b),b(c)//a(c),b(c)这样赋值不行,在构造函数可以输出,但main不行。初始化列表
    {
    }

c是局部变量,给b赋值完后,它的值就不存在了
    //第二种
    CStu(int &c):a(c),b(c)
 主函数:
int d=12;
CStu stu(d)
 d的作用范围大,一直在
 
数组和结构体使用初始化列表
数组
int a[4];
//第一种
CStu():a()//输出都为0,但不是所有编译器都允许
//第二种
CStu()
{
    for(int i=0;i<4;i++)
    {
           a[i]=0;
    }
 }
 //第三种
 CStu()
 {
     memset(a,0,16)//16:占4*4个字节
 }
结构体
1.
struct STU
{
    int i;
    float f;
};
结构体可以直接赋值 在main函数:
STU st={1,12.23f};
STU st1=st//结构体可以这样赋值
2.有疑问
在类里调用一个结构体
STU st;
CStu(STU sd):st(sd)
{
}
在main函数里
STU sf={12,12.12f}
CStu stu(sf)
宏定义
用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本
(1)简单的宏定义:
#define <宏名>  <字符串>
例: #define PI 3.1415926
(2) 带参数的宏定义
#define <宏名> (<参数表>) <宏体>
例: #define A(x) x
如果是自己编程使用宏替换,则在使用简单宏定义时,当字符串中不只一个符号时,加上括号表现出优先级,如果是带参数的宏定义,则要给宏体中的每个参数加上括号,并在整个宏体上再加一个括号。看到这里,不禁要问,用宏定义这么麻烦,这么容易出错,可不可以摒弃它, 那让我们来看一下在C语言中用宏定义的好处吧。
常函数
int a;
void show()const
{
    a=12;//报错,常函数不能修改数据成员
    int b=12 //内部允许这样
}
常对象:
const CStu stu
只能调用常函数,不能调用普通函数
静态成员
static int a;
static void fun();
类外初始化,静态成员受private修饰
类外:
int CStu::a=13//类外不用加static
输出:
cout<<CStu::a<<endl
//或者
CStu st;
st.a;
静态函数不能调用普通成员
静态成员时其他对象公有的,都可以访问
不使用for循环累加
class CStu
{
public:
    static int b;
    CStu()
    {
    b++;
    }
}
int main()
{
    CStu st[5];//5个对象,调用5个构造函数,b++五次,因为静态成员是共享的
    cout<<CStu::b<<endl
}