結構體實例(包括共用體)和類實例的初始化方法完全相同,二者都可以應用於繼承層次中。不同點是結構體(包括共用體)默認成員爲public,而類默認成員是private型的。
一、若類和結構體所有數據成員均爲public型,可採取如下帶花括號形式進行初始化。 注意: ① 不論值的個數多少,都必須使用花括號定界 ② 未指定值的數據成員編譯器會自動初始化爲默認值 ③ 這種初始化對象方式,要求所有數據成員必須爲public型 ④ 這種初始化對象方式,要求類中不能編寫任何構造函數 struct S { //class S 效果一樣 int x; unsigned short y; }; S testS1={100,123}; S testS2={200};//未指定值的數據成員初始化爲默認值,這裏os2.y=0; S TestS[4]={ {100,10}, {200,20}, {300} };//未指定值的初始化爲默認值,os[2].y,os[3].x,os[3].y。 二、若數據成員有private或protected型,或是提供了構造函數,必須使用構造函數來進行初始化。 struct S { //class S可自行試驗,結果相同 private: int x; public: double y; S(void){} S(int idemo,double ddemo) {x=idemo;y=ddemo;} void show(void) {cout<<x<<''\t''<<y<<endl;} }; S os1;//將調用默認構造函數(無參構造函數) S os2(1000,2.345); S os3=S(2000,4.567); S os[4]={S(10,1.234),S(20,2.234)};//未初始化的將調用默認構造函數。如此時沒有默認構造函數會出錯。 重要提示: ① 在S os3=S(2000,4.567);語句中,因是聲明並初始化os3對象,所以將調用S(int,double)構造函數對os3進行初始化。 ② S os3(2000,4.567); 等價於 S os3=S(2000,4.567); ③ 但如果os3已經存在了,S os3(100,1.234);os3=S(2000,4.567),則表示用一個臨時對象賦值給os3,將調用operator=,然後系統再釋放這個臨時產生的對象。系統默認的=運算是將源對象的數據成員的值複製到目標對象中的數據成員中。 三、接受一個參數的構造函數允許使用賦值句法初始化對象。 說明代碼如下: #include <iostream> using namespace std; class C { private: int x; public: C(int idemo) {x=idemo;} void show(void) {cout<<x<<endl;} }; struct S { private: int x; public: S(int idemo) {x=idemo;} void show(void) {cout<<x<<endl;} }; int main(int argc, char *argv[]){ C oc=1000;//不能企圖加花括號 oc.show(); S os=2000;//不能企圖加花括號 os.show(); return EXIT_SUCCESS; } |
C++結構體實例和類實例的初始化
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.