課程
/后端開發
/C++
/C++遠征之封裝篇(上)
private: ?const double m_dPi = 3.14;這樣寫合法嘛?合法的話是不是就不需要初始化列表了
2018-05-13
源自:C++遠征之封裝篇(上) 6-4
正在回答
不合法,private下是定義數據成員的,一般不賦值
qq_大巫師_0
類內成員變量一般有如下四種:
1、一般變量(int)
2、靜態成員變量(static int)
3、常量(const int )
4、靜態常量(static const int)
對應初始化方式如下:
1、一般變量可以在初始化列表里或者構造函數里初始化,不能直接初始化或者類外初始化
2、靜態成員變量必須在類外初始化
3、常量必須在初始化列表里初始化
4、靜態常量必須只能在定義的時候初始化(定義時直接初始化)
回到樓主的問題上,這種成員變量應該是屬于第三種,也就是必須在初始化列表里初始化。
但是如果你代碼這么寫的話,編譯也可以通過(vs2017),但是使用效果上是有區別的。
在定義時直接初始化const常量的話,用這個類實例化出來的每個對象中的const常量都是同一個數值,而如果是通過初始化列表來初始化的話,const常量的值取決于實例化時傳給const常量的初始化值。
也就是說,樓主說的這種的情況的話最好使用第四種成員變量形式。
舉報
封裝--面向對象的基石,本教程力求幫助小伙伴們即學即會
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2018-07-29
不合法,private下是定義數據成員的,一般不賦值
2018-05-13
類內成員變量一般有如下四種:
1、一般變量(int)
2、靜態成員變量(static int)
3、常量(const int )
4、靜態常量(static const int)
對應初始化方式如下:
1、一般變量可以在初始化列表里或者構造函數里初始化,不能直接初始化或者類外初始化
2、靜態成員變量必須在類外初始化
3、常量必須在初始化列表里初始化
4、靜態常量必須只能在定義的時候初始化(定義時直接初始化)
回到樓主的問題上,這種成員變量應該是屬于第三種,也就是必須在初始化列表里初始化。
但是如果你代碼這么寫的話,編譯也可以通過(vs2017),但是使用效果上是有區別的。
在定義時直接初始化const常量的話,用這個類實例化出來的每個對象中的const常量都是同一個數值,而如果是通過初始化列表來初始化的話,const常量的值取決于實例化時傳給const常量的初始化值。
也就是說,樓主說的這種的情況的話最好使用第四種成員變量形式。