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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

对象的初始化列表const变量的初始化

發布時間:2025/3/15 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对象的初始化列表const变量的初始化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

當B類中有A類并且A類還有自己的有參數構造函數的時候,那這時若是B再使用默認構造函數就不能使用了,因為B不能對A進行初始化;

#include <iostream> using namespace std;class A { public:A(int _a){a = _a; } protected: private:int a; }; class B { public: protected: private:int b1;;int b2;A a1;A a2;}; int main() {A a1(10);B objB; //在調用objB的時候沒有機會調用A的初始化函數,給A中的變量分配內存所以不能使用cout << "hello world!" << endl;system("pause");return 0; }

解決辦法:使用對象初始化列表

#include <iostream> using namespace std;class A { public:A(int _a){a = _a; cout << "構造函數a = " << a<<endl;}~A( ){cout <<"析構函數a" << endl;} protected: private:int a; }; //構造函數的初始化列表,解決了在B類中 組合了一個其他類的對象(A類) A中使用了有參數構造函數 //根據構造函數的調用規則 設計了A的構造函數 就必須使用A的構造函數 但是沒有機會使用 A的構造函數 //這時 構造函數額的初始化列表就排上用場 class B { public:B(int _b1,int _b2): a1(1),a2(2) //構造函數的初始化列表{}//參數傳遞B(int _b1,int _b2,int m,int n): a1(m),a2(n) //構造函數的初始化列表{b1 =_b1;b2 =_b2;cout << "B的構造函數" << endl;}~B(){cout <<"這是B的析構函數" << endl;} protected: private:int b1;int b2;A a2; //把a2放到上面是為了測試 被組合對象構造函數的調用順序是跟定義的順序相關 而不是列表初始化的順序A a1; //A類已經有定義的有參構造函數 若B中使用 就要使用 初始化列表}; void display() {B objB1(1,2,3,4); } //首先在執行被組合對象的構造函數 //如果被組合對象有多個 按照被組合對象定義的順序 而不是按照 初始化列表的順序、//析構函數和構造函數的調用順序相反 int main() { // A a1(10); // B objB(1,2); //在調用objB的時候沒有機會調用A的初始化函數,給A中的變量分配內存所以不能使用display();cout << "hello world!" << endl;system("pause");return 0; }

執行的結果:

從結果上可以看出被組合對象,構造函數的調用的順序是和定義的順序相關而不是初始化列表初始化的順序;

當一個類中有 const類型的變量的時候 要使用初始化列表進行初始化

#include <iostream> using namespace std;class A { public:A(int _a){a = _a; cout << "構造函數a = " << a<<endl;}~A( ){cout <<"析構函數a" << endl;} protected: private:int a; }; //構造函數的初始化列表,解決了在B類中 組合了一個其他類的對象(A類) A中使用了有參數構造函數 //根據構造函數的調用規則 設計了A的構造函數 就必須使用A的構造函數 但是沒有機會使用 A的構造函數 //這時 構造函數額的初始化列表就排上用場 //初始化 列表用來給const 類型變量初始化 class B { public:B(int _b1,int _b2): a1(1),a2(2),c(0) //構造函數的初始化列表{}//參數傳遞B(int _b1,int _b2,int m,int n): a1(m),a2(n),c(0) //構造函數的初始化列表 const 類型變量必須在 初始化成{b1 =_b1;b2 =_b2;cout << "B的構造函數" << endl;}~B(){cout <<"這是B的析構函數" << endl;} protected: private:int b1;int b2;A a2; //把a2放到上面是為了測試 被組合對象構造函數的調用順序是跟定義的順序相關 而不是列表初始化的順序A a1; //A類已經有定義的有參構造函數 若B中使用 就要使用 初始化列表const int c; //如果類的成員中有const 類型的成員變量則必須在 初始化了,列表中進行初始化}; void display() {B objB1(1,2,3,4); } //首先在執行被組合對象的構造函數 //如果被組合對象有多個 按照被組合對象定義的順序 而不是按照 初始化列表的順序、//析構函數和構造函數的調用順序相反 int main() { // A a1(10); // B objB(1,2); //在調用objB的時候沒有機會調用A的初始化函數,給A中的變量分配內存所以不能使用display();cout << "hello world!" << endl;system("pause");return 0; }

綜合

//對象做函數參數 //1 研究拷貝構造 //2 研究構造函數,析構函數的調用順序//總結 構造和析構的調用順序#include <iostream> using namespace std;class ABCD { public:ABCD(int a, int b, int c){this->a = a;this->b = b;this->c = c;printf("ABCD() construct, a:%d,b:%d,c:%d \n", this->a, this->b, this->c);}~ABCD(){printf("~ABCD() construct,a:%d,b:%d,c:%d \n", this->a, this->b, this->c);}int getA() {return this->a;} protected: private:int a;int b;int c; };class MyE { public:MyE():abcd1(1,2,3),abcd2(4,5,6),m(100){cout<<"MyD()"<<endl;}~MyE(){cout<<"~MyD()"<<endl;}MyE(const MyE & obj):abcd1(7,8,9),abcd2(10,11,12),m(100) //在拷貝構造函數中也要有初始化列表{printf("MyD(const MyD & obj)\n");}protected://private: public:ABCD abcd1; //c++編譯器不知道如何構造abc1ABCD abcd2;const int m; //常量要在初始化列表中進行初始化};int doThing(MyE mye1) //在調用函數的時候也會調用 copy構造函數 {printf("doThing() mye1.abc1.a:%d \n", mye1.abcd1.getA()); //這種情況下是一個類中有另一個類的變量return 0; }int run2() {MyE myE;doThing(myE);return 0; }// int run3() {printf("run3 start..\n");//ABCD(400, 500, 600); //臨時對象的生命周期 ABCD abcd = ABCD(100, 200, 300);//若直接調用構造函數呢?//想調用構造函數對abc對象進行再復制,可以嗎?//在構造函數里面調用另外一個構造函數,會有什么結果?printf("run3 end\n");return 0; }int main() {run2();run3();system("pause");return 0; }

結果:

“demotest.exe”: 已加載“E:\VS2008\demotest\Debug\demotest.exe”,已加載符號。 “demotest.exe”: 已加載“C:\Windows\SysWOW64\ntdll.dll” “demotest.exe”: 已加載“C:\Windows\SysWOW64\kernel32.dll” “demotest.exe”: 已加載“C:\Windows\SysWOW64\KernelBase.dll” “demotest.exe”: 已加載“C:\Windows\winsxs\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.21022.8_none_96748342450f6aa2\msvcp90d.dll”,已加載符號。 “demotest.exe”: 已加載“C:\Windows\winsxs\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.21022.8_none_96748342450f6aa2\msvcr90d.dll”,已加載符號。 “demotest.exe”: 已加載“C:\Windows\SysWOW64\apphelp.dll” “demotest.exe”: 已加載“ImageAtBase0x4a2d0000”,未加載任何符號。 “demotest.exe”: 已卸載“ImageAtBase0x4a2d0000” 程序“[3204] demotest.exe: 本機”已退出,返回值為 0 (0x0)。

總結

以上是生活随笔為你收集整理的对象的初始化列表const变量的初始化的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 色视频免费看 | 国产视频一区在线播放 | 91高跟黑色丝袜呻吟在线观看 | 国产精品图片 | 亚洲欧洲日本国产 | 欧美色图1 | 午夜精品在线视频 | 91入囗 | 免费观看污视频 | 日日碰狠狠躁久久躁蜜桃 | 欧美日韩国产激情 | 中文字幕五区 | 国内成人av | 日本吃奶摸下激烈网站动漫 | 99精品国产成人一区二区 | 亚洲最新 | 午夜av影视 | 四川丰满少妇被弄到高潮 | 国产高清自拍视频 | 亚欧美一区二区三区 | 污视频网站免费看 | 欧美激情日韩 | 蝌蚪自拍网站 | 欧美综合激情网 | 欧美寡妇性猛交 | 亚洲免费一级片 | 亚洲国产精品无码观看久久 | 国产精品看片 | 91香蕉视频污污 | 国产毛片自拍 | 黑人一级大毛片 | 国产精品91在线 | 小泽玛利亚一区二区三区视频 | 亚洲中文字幕一区 | 伊人色婷婷 | 操穴影院 | 亚洲精品一区三区三区在线观看 | 娇小激情hdxxxx学生 | 亚洲免费色视频 | 男人女人拔萝卜视频 | 国产999在线观看 | 欧美精品v| 国产99久久久欧美黑人 | 亚洲aⅴ| 国产主播在线观看 | 久久综合亚洲精品 | 9i精品福利一区二区三区 | 欧美操操| 黄色网址在线免费看 | 成人夜晚视频 | 日韩精品极品视频免费观看 | 日韩一区中文 | 中文字幕人妻熟女人妻a片 麻豆91视频 | 欧美色图19p | www.jizzcom| 悠悠色影院| 午夜免费看片 | 国产精品腿扒开做爽爽爽挤奶网站 | 国产乱淫视频 | 欧美成人怡红院 | 小俊大肉大捧一进一出好爽 | www.精品在线 | 亚洲天堂av片 | 国产精品久免费的黄网站 | 精品人妻一区二区三区换脸明星 | 777在线视频 | 亚洲另类天堂 | 森泽佳奈作品在线观看 | 综合色在线视频 | 成人va在线观看 | 免费荫蒂添的好舒服视频 | 久久久久久99 | 久草国产在线 | www,av在线| 人人狠狠 | 精品国产av 无码一区二区三区 | www.毛片.com| 琪琪色视频 | 久久成人视屏 | 蜜桃av噜噜一区二区三区网址 | 瑟瑟视频在线 | jizz教师 | 女性生殖扒开酷刑vk | 日本电车痴汉 | avav国产| 波多野结衣在线影院 | 欧美一级免费黄色片 | 亚洲永久精品一区 | 女生脱裤子让男生捅 | 日本性视频网站 | 久久久久久久久蜜桃 | 婷婷综合影院 | 女人叉开腿让男人桶 | 日本成人在线播放 | 日韩欧美视频免费在线观看 | 女警白嫩翘臀呻吟迎合 | 欧洲美女粗暴牲交免费观看 | 欧美一区亚洲 | 色爽交 |