【転載】C++構造体インスタンスとクラスインスタンスの初期化

7863 ワード

転載先http://blog.csdn.net/Eric_Jo/article/details/4083806
 
    構造体インスタンス(共通体を含む)とクラスインスタンスの初期化方法はまったく同じであり、どちらも継承階層に適用できます.異なる点は、構造体(共通体を含む)のデフォルトメンバーが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<''/t''<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 os 3=S(2000,4.567);文では、os 3オブジェクトを宣言して初期化するため、S(int,double)コンストラクタを呼び出してos 3を初期化します.
②        S os3(2000,4.567); に等しい S os3=S(2000,4.567);
③        しかし、os 3が既に存在する場合、S os 3(100,1.234);os 3=S(2000,4.567)は、os 3に一時オブジェクトで割り当てられ、operator=が呼び出され、一時的に生成されたオブジェクトが解放されることを示す.システムのデフォルト=演算は、ソース・オブジェクトのデータ・メンバーの値をターゲット・オブジェクトのデータ・メンバーにコピーします.
 
三、パラメータを受け入れる構造関数は、付与文法を使用してオブジェクトを初期化することを許可する.
説明コードは次のとおりです.
 
 1 #include 
 2 
 3 using namespace std;
 4 
 5 class C {
 6 
 7     private:
 8 
 9         int x;
10 
11     public:
12 
13         C(int idemo) {x=idemo;}
14 
15         void show(void) {cout<endl;}
16 
17 };
18 
19 struct S {
20 
21     private:
22 
23         int x;
24 
25     public:
26 
27         S(int idemo) {x=idemo;}
28 
29         void show(void) {cout<endl;}
30 
31 };
32 
33 int main(int argc, char *argv[]){
34 
35     C oc=1000;//        
36 
37     oc.show();
38 
39     S os=2000;//        
40 
41     os.show();
42 
43     return EXIT_SUCCESS;
44 
45 }

 
 
転載先:https://www.cnblogs.com/fanqs/p/3606156.html