日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【C++grammar】C++类数据成员的初始化

發布時間:2023/12/1 c/c++ 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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 (內嵌對象必須在被嵌對象的構造函數體執行前就構造完成)

class Time { /* Code omitted */ } class Action { public:Action(int hour, int minute, int second) {time = Time(hour, minute, second); //time對象應該在構造函數體之前構造完成} private:Time time; }; Action a(11, 59, 30);

解釋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對象是個私有的,所以不能直接訪問

有關代碼:

class Circle { private:double radius; public://指示編譯器生成無參構造函數Circle() = default;//構造函數Circle(double r) {radius = r;}double getArea() {return 3.14 * radius * radius;} }; class Square { private:double side; public://指示編譯器不構造默認構造函數//Square() = delete;// 私有數據成員side double sideSquare(double side) :side{ side } {}//或者寫成/*Square(double side){this->side = side;}*/double getArea() {return side * side;} }; class Combo { public:Circle c;Square s;//構造函數.內嵌對象的構造必須在構造函數體之前就完成了Combo() :s{1.0} {} };int main() {Combo o{};cout<<o.c.getArea() << endl;return 0; }

5、成員的初始化方法的優先級


一個成員同時有就地初始化和構造函數列表初始化,則就地初始化語句被忽略不執行

總結

以上是生活随笔為你收集整理的【C++grammar】C++类数据成员的初始化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。