アフィリエイト広告を利用しています

広告

posted by fanblog

2017年10月22日

《その88》 メンバ部分オブジェクトの初期化(p.411演習11-4)


メンバ部分オブジェクトの初期化

前回《その87》、クラスがクラス型メンバを持つときの初期化について書きましたが、ここでもう一度確認しておきます。


【クラス型メンバが初期化されるまでの過程】

(1) デフォルトコンストラクタによって、クラス型メンバの初期化が行われる。

(2) 与えられた引数を用いて、クラス型メンバに代入するための一時オブジェクトが生成される。

(3) コンストラクタ本体が実行されて、初期化済のクラス型メンバに (2) の一時オブジェクトが
代入される。



 メンバ部分オブジェクトの初期化が (1), (2), (3) の順序で行われることが、次の演習11-4 で確認できます。



新版明解C++入門編 p.411 演習11-4
 コンストラクタ初期化子によって明示的に初期化しない場合に、メンバ部分オブジェクトがデフォルトコンストラクタで初期化されることをプログラムを作成して確認せよ。

// p411_演習11-4
#include <iostream>
using namespace std;

class Sub {
int p; int q;
public:
Sub() { p = 1; q = 2; } // クラス Sub のデフォルトコンストラクタ
Sub(int p, int q) {
this->p = p; this->q = q;
}

int get_p() const { return p; }
int get_q() const { return q; }
};

class Test {
int a;
Sub sub; // メンバ部分オブジェクト sub
public:
Test(int a, int p, int q);
};

Test::Test(int a, int p, int q) {
this->a = a;

cout << sub.get_p() << " " << sub.get_q() << '\n';
/*
↑ のコードが実行される段階で、p が 1, q が 2 であると出力される。
このことから、次の
sub = Sub(p, q);
が実行されていない段階で、すでに
デフォルトコンストラクタ Sub() で初期化された Sub型のオブジェクトが生成されて
いる
ことがわかる。
*/

sub = Sub(p, q);
/*
構築済みのオブジェクト sub に対する代入。
Sub(int p, int q) によって生成された一時オブジェクトの値が sub に代入される。

*/

cout << sub.get_p() << " " << sub.get_q() << '\n';
/*
↑ 最終的に、p が 1234, q が 5678 になっている。
*/

}

int main() {
Test test(0, 1234, 5678);
}

c11_04.png


新版 明解C 入門編 (明解シリーズ)

新品価格
¥2,916から
(2017/8/30 21:02時点)









--
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/6885839
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


検索
<< 2018年08月 >>
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
プロフィール
こうすけさんの画像
こうすけ

 たまに、クリック お願いします m(_ _)m

 AA にほんブログ村 IT技術ブログ C/C++へ

こうすけ:メール kousuke_cpp@outlook.jp

【1】★★C++ 記事目次★★ ← 利用可能です。
・新版明解C++入門編 / 新版明解C++中級編
・その他 C++ 関連記事

【2】★★こうすけ@C#★★
・C# の初歩的な記事


×

この広告は30日以上新しい記事の更新がないブログに表示されております。