新聞中心
在C++環(huán)境的世界中有這樣兩個概念,向上類型轉換,向下類型轉換,分別描述的是子類向基類和基類向子類的強制類型轉換,因此可以在使用的過程當中感受到趣味性和吸引力。

堅守“ 做人真誠 · 做事靠譜 · 口碑至上 · 高效敬業(yè) ”的價值觀,專業(yè)網站建設服務10余年為成都砂巖浮雕小微創(chuàng)業(yè)公司專業(yè)提供成都定制網頁設計營銷網站建設商城網站建設手機網站建設小程序網站建設網站改版,從內容策劃、視覺設計、底層架構、網頁布局、功能開發(fā)迭代于一體的高端網站建設服務。
- void swap(int &a,int &b)
- {
- //...
- }
- 2.請寫出以下結構或類的大小(sizeof的輸出值),并給出簡要的解釋.
- //A:
- typedef struct
- {
- char c1;
- char c2;
- int n;
- } stru;
- //B:
- class ClassA
- {
- public:
- int m_data1;
- int m_data2;
- void func1() { }
- void func2() { }
- virtual void vfunc1() { }
- virtual void vfunc2() { }
- };
- //C:
- struct ClassB {
- void f();
- };
- B::f(){
- }
有興趣的看客可以先不看我下面的正確答案,試著作出自己的答案........
1.原題的考點就在于 Y() : b("b"), a("a"), X("base") {} 構造函數(shù)Y()冒號后面的這一串東西,說實話剛開始做的時候我只記得和初始化有關系,正確的名稱其實是 "初始化參數(shù)列表".它的關鍵作用是在進入構造函數(shù)前完成對某些數(shù)據(jù)的初始化工作,在program1中的意思就是優(yōu)先于Y()構造函數(shù)本身完成對象b和a的初始化,b("b"),a("a")就相當與X b(X("b"));X a(X("a")) 也就是通過拷貝構造函數(shù)完成。
2.可能有人要問 X("base")怎么這么用, 其實很簡單,注意 Y 是X 的子類, 子類和父類構造函數(shù)的關系我想人人皆知,即先調用父類構造函數(shù),這里的X("base")就是指定在調用Y()構造函數(shù)之前調用的父類X的構造函數(shù)是C++環(huán)境而不是 X(), 這里有些繞口,可以試著把 X("base")換成X(), 就明確具體的意思了。
3.最后一個關鍵點就是program1的結果輸出順序問題,我估計有些人的答案是 b , a ,base 或者 base , b ,a ,這里有兩個意思, 第一,main 函數(shù)里申明 y, 所以正確執(zhí)行順序應該是 Y的父類X的構造函數(shù)(注意Y初始化參數(shù)列表中指明了Y的父類X究竟應該調用哪個構造函數(shù))------>Y的私有成員變量的構造函數(shù)(注意Y初始化參數(shù)列表中指明了私有成員變量究竟應該調用哪個構造函數(shù))------>Y的構造函數(shù),對于program1 就是需要先調用X("base") ;
第二, 所有私有成員變量的構造函數(shù)的調用順序與申明此變量的順序保持一致,而跟調用變量的順序無關,對于program1,調用Y構造函數(shù)調用私有變量順序為先b后a, 而申明私有變量順序為先a后b,所以后者是正確結果 ,綜上,構造函數(shù)調用順序依次為 X("base"),X("a"),X("b"),Y()
4.弄明白以上三點,我們再來看program2, 那就簡單多了,program2沒有任何trap,規(guī)規(guī)矩矩按照先父類構造,后私有變量構造,再子類構造的順序,輸出結果中的第一個XXX是Y的父類X的構造, 第二和第三個C++環(huán)境分別是類Y中變量a,b(注意順序)的構造,最后是Y構造中的四輸出。
就是static加上去看似很方便,但你怎么知道就應該分配256個字節(jié)呢?但是如果動態(tài)分配就要用到堆,那釋放誰來釋放呢?所以我個人認為最好的辦法是這個函數(shù)加個str的參數(shù),由客戶程序員自己填。這樣可以把錯誤控制住。但如果實在不愿意這樣,我認為只能用智能指針了。關于智能指針就不展開說了,太多了。
文章名稱:如何進行C++環(huán)境編譯
本文來源:http://www.dlmjj.cn/article/ccieooc.html


咨詢
建站咨詢
