關(guān)鍵詞:類中成員的初始化列表笨鸡、初始化與賦值的區(qū)別骏庸、
1. 類成員的初始化
- C++中提供了初始化列表對(duì)成員變量進(jìn)行初始化
-
語法規(guī)則:
編程說明:類中const成員及通過初始化列表初始化
#include <stdio.h>
class Test
{
private:
const int ci;
public:
Test() : ci(10) // 初始化
{
}
int getCI()
{
return ci;
}
};
int main()
{
Test t;
printf("%d\n", t.getCI());
return 0;
}
- 類成員初始化注意事項(xiàng)
- 成員的初始化順序與成員的聲明順序相同直焙;
- 成員的初始化順序與初始化列表中的位置無關(guān)祠斧;
- 初始化列表先于構(gòu)造函數(shù)的函數(shù)體執(zhí)行[當(dāng)執(zhí)行構(gòu)造函數(shù)的函數(shù)體時(shí)盹兢,對(duì)象已經(jīng)創(chuàng)造完成邻梆,執(zhí)行構(gòu)造函數(shù)是為了初始化對(duì)象的狀態(tài)]。
編程說明:初始化列表的使用
#include <stdio.h>
class Value
{
private:
int mi;
public:
Value() : mi(0)
{
}
Value(int i)
{
printf("i = %d\n", i);
mi = i;
}
int getI()
{
return mi;
}
};
class Test
{
private:
Value m2;
Value m3;
Value m1;
public:
Test() : m1(1), m2(2), m3(3)
{
printf("Test::Test()\n");
}
};
int main()
{
Test t;
Value v;
printf("v.getI = %d\n", v.getI());
return 0;
}
輸出結(jié)果:
i = 2
i = 3
i = 1
Test::Test()
v.getI = 0
2. 類中的const成員
- 類中的const成員會(huì)被分配空間的
- 類中的const成員的本質(zhì)是只讀變量
- 類中的const成員只能在初始化列表中指定初始值
注意:編譯器無法直接得到
const
成員的初始值蛤迎,因此無法進(jìn)入符號(hào)表成為真正意義上的常量确虱。
編程說明:const修飾的只讀成員變量
#include <stdio.h>
class Test
{
private:
const int ci;
public:
Test() : ci(100)
{
}
int getCI()
{
return ci;
}
void setCI(int i)
{
int* p = const_cast<int*>(&ci);
*p = i;
}
};
int main()
{
Test t;
printf("t.getCI() = %d\n", t.getCI());
t.setCI(10);
printf("t.getCI() = %d\n", t.getCI());
return 0;
}
輸出結(jié)果:
t.getCI() = 100
t.getCI() = 10
初始化與復(fù)制的區(qū)別:
初始化:對(duì)正在創(chuàng)建的對(duì)象進(jìn)行初值設(shè)置
賦值:對(duì)已經(jīng)存在的對(duì)象進(jìn)行值設(shè)置
3. 小結(jié)
- 類中可以使用初始化列表對(duì)成員進(jìn)行初始化
- 初始化列表先于構(gòu)造函數(shù)體執(zhí)行
- 類中可以定義
const
成員變量 -
const
成員變量必須在初始化列表中指定初值 -
const
成員變量為只讀變量