2025年2月1日土曜日

C++で時間クラスを作成し、時間差を計算するプログラム

 クラス設計

C++
#include <iostream>

class Jikan {
public:
    int hour, minute, second;

    // コンストラクタ (初期化)
    Jikan(int h = 0, int m = 0, int s = 0) : hour(h), minute(m), second(s) {}

    // 時間の入力
    void input() {
        std::cout << "時: "; std::cin >> hour;
        std::cout << "分: "; std::cin >> minute;
        std::cout << "秒: "; std::cin >> second;
    }

    // 時間の出力
    void output() const {
        std::cout << hour << "時" << minute << "分" << second << "秒" << std::endl;
    }

    // 時間差の計算 (このオブジェクトからtimeを引いた結果を返す)
    Jikan diff(const Jikan& time) const {
        int sec1 = hour * 3600 + minute * 60 + second;
        int sec2 = time.hour * 3600 + time.minute * 60 + time.second;
        int diff_sec = sec1 - sec2;

        int h = diff_sec / 3600;
        diff_sec %= 3600;
        int m = diff_sec / 60;
        diff_sec %= 60;

        return Jikan(h, m, diff_sec);
    }
};

プログラムの実行

C++
int main() {
    Jikan time1, time2;

    std::cout << "最初の時間を入力してください。" << std::endl;
    time1.input();

    std::cout << "2番目の時間を入力してください。" << std::endl;
    time2.input();

    std::cout << "最初の時間: ";
    time1.output();

    std::cout << "2番目の時間: ";
    time2.output();

    Jikan diff_time = time1.diff(time2);
    std::cout << "時間差: ";
    diff_time.output();

    return 0;
}

解説

  • Jikanクラス:
    • hour, minute, second の3つのメンバー変数で時間を表現します。
    • コンストラクタで初期化、input() メソッドで入力、output() メソッドで出力を行います。
    • diff() メソッドは、2つの時間を秒数に変換し、差を求めて再びJikanオブジェクトとして返します。
  • main関数:
    • 2つのJikanオブジェクトを作成し、入力、出力、時間差の計算を行います。

拡張

  • 負の時間: diff() メソッドで負の時間が計算される場合、適切に表示するように調整できます。
  • オーバーロード: +, -, ==, != などの演算子をオーバーロードすることで、より直感的な操作が可能になります。
  • エラー処理: 入力値が不正な場合のエラー処理を追加できます。
  • 時刻のフォーマット: 出力形式をカスタマイズできます。
  • 日付との組み合わせ: 日付と組み合わせて、より複雑な時間計算に対応できます。

注意点

  • このプログラムでは、単純な時間計算を想定しています。閏年やタイムゾーンなど、より複雑な要素を考慮する場合は、より高度なライブラリやアルゴリズムが必要になります。
  • C++11以降では、std::chrono ライブラリが提供されており、より正確で柔軟な時間操作が可能です。

このプログラムをベースに、ご自身の目的に合わせて拡張してみてください。

0 件のコメント:

コメントを投稿