C++结构体实例和类实例的初始化
?結構體實例(包括共用體)和類實例的初始化方法完全相同,二者都可以應用于繼承層次中。不同點是結構體(包括共用體)默認成員為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++结构体实例和类实例的初始化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS 16来了 还有多款新品!苹果股价
- 下一篇: 修改linux开机画面