【C++grammar】C++类数据成员的初始化
生活随笔
收集整理的這篇文章主要介紹了
【C++grammar】C++类数据成员的初始化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 1、類成員的就地初始化example
- 2、構造函數初始化
- 3、默認構造函數:Default Constructor
- 4、舉例
- 5、成員的初始化方法的優先級
1、類成員的就地初始化example
class S { int m = 7; // ok, copy-initializes m int n(7); // 錯誤:不允許用小括號初始化 std::string s{'a', 'b', 'c'}; // ok, direct list-initializes sstd::string t{"Constructor run"}; // okint a[] = {1,2,3}; // 錯誤:數組類型成員不能自動推斷大小 int b[3] = {1,2,3}; // ok// 引用類型的成員有一些額外限制,參考標準 public:S() { } };2、構造函數初始化
A data field is an object type (Object in Object / Embedded Object) (類的數據域是一個對象類型,被稱為對象中的對象,或者內嵌對象)
The embedded object must be constructed before the body of ctor is executed (內嵌對象必須在被嵌對象的構造函數體執行前就構造完成)
解釋time是Time的對象,是Action的內嵌對象
需要注意的地方:
在構造函數的函數體中,不可以初始化類的數據成員
構造函數的函數體執行之前,類中的數據成員必須完成初始化
3、默認構造函數:Default Constructor
默認構造函數是可以無參調用的構造函數,既可以是定義為空參數列表的構造函數,也可以是所有參數都有默認參數值的構造函數。
class Circle1 { public:Circle1() { // 無參數radius = 1.0; /*函數體可為空*/} private:double radius; }; class Circle2 { public:Circle2(double r = 1.0) // 所有參數都有默認值: radius{ r } {} private:double radius; };4、舉例
class Circle { private:double radius; public:double getArea() {return 3.14 * radius * radius;} }; class Square { private:double side; public:double getArea() {return side * side;} }; class Combo { private:Circle c;Square s;};int main() {Combo o{};cout<<o.c.getArea() << endl;return 0; }此時,c對象是個私有的,所以不能直接訪問
有關代碼:
5、成員的初始化方法的優先級
一個成員同時有就地初始化和構造函數列表初始化,則就地初始化語句被忽略不執行
總結
以上是生活随笔為你收集整理的【C++grammar】C++类数据成员的初始化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开封看内分泌性不孕最好的医院推荐
- 下一篇: 【C++grammar】string类和