デフォルトコンストラクタ

1424 ワード

『c++プログラミング思想』読書ノート(6)
第4章:初期化とクリア、内容が多すぎるため、いくつかのブログに分けてまとめます:)
デフォルトのコンストラクション関数は、パラメータを持たないコンストラクション関数です.コンパイラが詳細を知らずにオブジェクトを作成する必要がある場合、デフォルトのコンストラクション関数は非常に重要です.たとえば、クラスYがあり、オブジェクトを定義します.
Y y4[2] = {Y(1)};

コンパイラはデフォルトのコンストラクション関数が見つからないことを報告し、配列の2番目のオブジェクトはパラメータを持たずに作成したいので、コンパイラはデフォルトのコンストラクション関数を探します.実際には、Yオブジェクトの配列を単純に定義するだけであれば、Y y 5[7];または単一のオブジェクト:Y y;コンパイラは、配列内の各オブジェクトを初期化するためにデフォルトのコンストラクション関数を使用する必要があるため、同じエラーを報告します.
デフォルトのコンストラクション関数はこのように重要であるため、コンストラクションタイプ(structまたはclass)にコンストラクション関数がない場合、コンパイラは自動的に1つを作成します.次の例では、正常に動作します.
class Z {
  int i;  // private
};  // no constructor
Z z, z2[10];

しかし、デフォルトのコンストラクション関数がなくコンストラクション関数があると、上のオブジェクト定義でコンパイルエラーが発生します.
c++の初心者にとって、自動的に生成されるデフォルトの構造関数は、プログラミングを容易にすることはありません.実際には、既存のcコードと後方互換性を維持する必要があります.cではstruct配列を作成することがよくありますが、c++ではデフォルトのコンストラクション関数がない場合、コンパイルエラーが発生します.もし私たちがスタイルの問題だけで私たちのcコードを修正して、c++で再コンパイルしたら、私たちは喜んでいないかもしれません.cコードをc++でコンパイルすると、私たちはいつもこのようなコンパイルエラーに遭遇しますが、これらのコンパイルエラーはc++コンパイラが発見したcの不良コードです.c++のルールがもっと厳しいからです.実際、c++コンパイラでcコードをコンパイルすることは、潜在的なエラーを発見する良い方法です.
△この文章は少し短いです.この内容しか残っていないので、この章に関する他の内容は私の前の2つのブログを参考にすることができます.