2025年2月1日土曜日

C++ コンストラクターの初期化子リスト

C++
Jikan(int h = 0, int m = 0, int s = 0) : hour(h), minute(m), second(s) {}

このコードは、Jikan クラスのコンストラクターの定義です。コロン (:) の後に続く部分は、初期化子リスト と呼ばれます。

解説

  1. Jikan(int h = 0, int m = 0, int s = 0):

    • これは、Jikan クラスのコンストラクターの宣言です。
    • int h = 0, int m = 0, int s = 0 は、それぞれ hourminutesecond という名前の整数型の仮引数です。
    • = 0 は、これらの仮引数のデフォルト値が0であることを示しています。つまり、コンストラクター呼び出し時にこれらの引数を省略した場合、デフォルト値の0が使用されます。
  2. : hour(h), minute(m), second(s):

    • これは、初期化子リストです。
    • コロン (:) の後に、メンバ変数を初期化する式を記述します。
    • hour(h) は、メンバ変数 hour を仮引数 h の値で初期化することを意味します。
    • 同様に、minute(m) はメンバ変数 minutem で、second(s) はメンバ変数 seconds で初期化します。
  3. {}:

    • これは、コンストラクターの本体です。
    • この例では、初期化子リストでメンバ変数の初期化を行っているため、本体は空です。

初期化子リストの利点

  • 効率性:

    • 初期化子リストを使うと、メンバ変数の初期化を宣言と同時に行うことができます。
    • コンストラクターの本体で代入を行うよりも効率的です。特に、const メンバ変数や参照メンバ変数の初期化は、初期化子リストでのみ可能です。
  • 可読性:

    • 初期化子リストを使うことで、メンバ変数の初期化がコンストラクターの宣言部分で明確になり、コードの可読性が向上します。

使用例

C++
#include <iostream>

class Jikan {
private:
  int hour;
  int minute;
  int second;

public:
  Jikan(int h = 0, int m = 0, int s = 0) : hour(h), minute(m), second(s) {}

  void printTime() {
    std::cout << hour << ":" << minute << ":" << second << std::endl;
  }
};

int main() {
  Jikan now; // デフォルト値で初期化 (0:0:0)
  Jikan noon(12); // hour を 12 で初期化 (12:0:0)
  Jikan meeting(14, 30); // hour を 14、minute を 30 で初期化 (14:30:0)
  Jikan endTime(18, 0, 0); // hour を 18、minute を 0、second を 0 で初期化 (18:0:0)

  now.printTime();
  noon.printTime();
  meeting.printTime();
  endTime.printTime();

  return 0;
}

この例では、Jikan クラスのコンストラクターで初期化子リストを使用しています。main 関数では、様々な方法で Jikan オブジェクトを生成し、printTime() メソッドで時刻を表示しています。

まとめ

初期化子リストは、C++ のコンストラクターでメンバ変数を効率的に初期化するための重要な機能です。積極的に活用することで、より効率的で読みやすいコードを書くことができます。

0 件のコメント:

コメントを投稿