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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

28.构造函数中,成员变量一定要通过初始化列表来初始化的?

發布時間:2025/3/21 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 28.构造函数中,成员变量一定要通过初始化列表来初始化的? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先要明確:如果對象成員是const或者引用的話,必須將其初始化!

構造函數中,成員變量一定要通過初始化列表來初始化的的幾種情況!

1)對象成員是const或者引用

#include <iostream> using namespace std;class A { public:A(int &v) : i(v), p(v), j(v) {}void print_val() { cout << "hello:" << i << " " << j << endl; } private:const int i;//類成員為const類型int p;int &j;//類成員為引用類型 };int main(int argc, char **argv) {int pp = 45;A b(pp);b.print_val();return 0; }

const對象或引用只能初始化但是不能賦值。構造函數的函數體內只能賦值而不是初始化,因此初始化const對象或引用的唯一機會是構造函數函數體之前的初始化列表中。

從無到有叫初始化,初始化(調用拷貝構造函數)創建了新對象;賦值(調用賦值操作符)沒有創建新對象,而是對已有的對象賦值。

2)類成員為沒有默認構造函數的類類型? (可以查看本博客C++模塊第29篇關于構造函數的講解)

#include <iostream> using namespace std;class Base { public:Base(int a) : val(a) {} private:int val; };class A { public:A(int v) : p(v), b(v) {}void print_val() { cout << "hello:" << p << endl; } private:int p;Base b;//類成員為沒有默認構造函數的類 };int main(int argc, char **argv) {int pp = 45;A b(pp);b.print_val();return 0; }

原因同樣是創建對象時,要初始類成員的每一個成員。

3)如果類存在繼承關系,派生類必須在其初始化列表中調用基類的構造函數

#include <iostream> using namespace std;class Base { public:Base(int a) : val(a) {} private:int val; };class A : public Base { public:A(int v) : p(v), Base(v) {}//類A繼承自類Base,需在其初始化列表中調用Base的構造函數void print_val() { cout << "hello:" << p << endl; } private:int p; };int main(int argc, char **argv) {int pp = 45;A b(pp);b.print_val();return 0; }

?

總結

以上是生活随笔為你收集整理的28.构造函数中,成员变量一定要通过初始化列表来初始化的?的全部內容,希望文章能夠幫你解決所遇到的問題。

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