4

私は簡単なサンプルを持っています:

#include <iostream>

class parent {
public:
    int i;
};

class child : public parent {
public:
    int d;
};

int main() {
    child c;
    std::cout << c.d << std::endl;
    return 0;
}

コンストラクターを呼び出すことによって、コンストラクターを持つ基本クラスまたはメンバーを明示的に初期化しない場合、コンパイラは、既定のコンストラクターを使用して基本クラスまたはメンバーを自動的に初期化します。

ただし、c (int d;およびint i;) のすべての int は初期化されません。

ここに画像の説明を入力

それの何が問題なのですか?または、何かobviosが表示されませんか?

4

3 に答える 3

4

組み込み型では、実際には自分で初期化を行う必要があります。

class parent
{
 public:
  parent() : i() {}
  int i;
};

これはに初期化iされ0ます。

于 2013-01-23T22:23:08.993 に答える
4

組み込みのデータ型(などint)は実際には初期化されていません。それらの「デフォルトコンストラクタ」は何もせず、デフォルト値もありません。したがって、それらはジャンク値を取得するだけです。特定の値を設定する場合は、組み込みデータ型を明示的に初期化する必要があります。

于 2013-01-23T22:23:13.230 に答える
3

コンストラクターと基本型を持たないクラスで行われるデフォルト初期化とゼロ初期化には違いがあります。

child c1;           // Default initialized. int types are not initialized.
child c2 = child(); // Zero initialized.    int types are in initialized to zero.
// In C++ 11
child c3 {};        // Use new syntax for zero initialization

より詳細な説明:
ここ: https://stackoverflow.com/a/7546745/14065
ここ: https://stackoverflow.com/a/8280207/14065

于 2013-01-23T22:27:24.240 に答える