クラス設計
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 件のコメント:
コメントを投稿