【転載】C++構造体インスタンスとクラスインスタンスの初期化
7863 ワード
転載先http://blog.csdn.net/Eric_Jo/article/details/4083806
構造体インスタンス(共通体を含む)とクラスインスタンスの初期化方法はまったく同じであり、どちらも継承階層に適用できます.異なる点は、構造体(共通体を含む)のデフォルトメンバーがpublicであり、クラスのデフォルトメンバーがprivate型であることです.
一、クラスと構造体のすべてのデータメンバーがpublic型である場合、以下のようなカッコ付きで初期化することができる.
注意:
① 値の個数にかかわらず、カッコで境界を定める必要があります.
② 値が指定されていないデータ・メンバー・コンパイラは、自動的にデフォルト値に初期化されます.
③ この初期化オブジェクト方式では、すべてのデータメンバーがpublic型である必要があります.
④ この初期化オブジェクト方式では,クラスに構造関数を記述できないことが要求される.
二、データメンバーにprivateまたはprotected型がある場合、またはコンストラクション関数が提供されている場合は、コンストラクション関数を使用して初期化する必要があります.
重要なヒント:
① 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=が呼び出され、一時的に生成されたオブジェクトが解放されることを示す.システムのデフォルト=演算は、ソース・オブジェクトのデータ・メンバーの値をターゲット・オブジェクトのデータ・メンバーにコピーします.
三、パラメータを受け入れる構造関数は、付与文法を使用してオブジェクトを初期化することを許可する.
説明コードは次のとおりです.
転載先:https://www.cnblogs.com/fanqs/p/3606156.html
構造体インスタンス(共通体を含む)とクラスインスタンスの初期化方法はまったく同じであり、どちらも継承階層に適用できます.異なる点は、構造体(共通体を含む)のデフォルトメンバーが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