トピックの要件
タイトルの説明: 時間クラスを定義します。時間と分は、その 2 つのプライベート メンバー データです。開始時刻と終了時刻 (開始時刻は終了時刻より早い) を入力し、演算子のオーバーロード - (マイナス記号) を使用して 2 つの時刻の間の分数を計算します。説明: これら 2 つの時間は同じ 1 日内であり、24 時間のタイミング式、つまり 00:00 ~ 23:59 を使用します。
入力形式: テスト入力には複数のテスト ケースが含まれており、各テスト ケースは 1 行を占めます。各テスト ケースにはスペースで区切られた 4 つの数字が含まれます。各数字は 2 桁で構成されます。最初の数字と 2 番目の数字は開始時刻の時と分を表し、3 番目と 4 番目の数字は開始時刻の時と分を表します。それぞれ終了時刻。テストケースの入力が 00 00 00 00 の場合、入力が終了し、対応する結果は出力されません。
出力形式: テスト ケースごとに 1 行を出力します。2 つの間の分数を示す数値を出力するだけです。
入力例:
12 11 12 58
00 13 16 00
09 07 23 59
00 00 00 00
出力例:
47
947
892
問題解決のアイデア
Time
次のプライベート メンバー変数を使用して名前を付けたクラスを定義します。
hour
: 時間minute
: 分
および次のパブリック メンバー関数:
- コンストラクター: 時間と分のパラメーターを渡すことができます。
- Friend 関数
operator-
: タイプ (単位: 分) の 2 つのオブジェクト間の時間差を計算する-
演算子Time
。
operator-
関数では、時間判定の考え方を利用して、2つの時間の差を分単位で計算します。
別々に読み取った2つのTime
物体、p.minute
がq.minute
より小さいか等しい場合は、その点全体を通過していないことを意味し、時間と分の差から直接時差を計算します。それ以外の場合は、時点p
全体q
時差を取得するには、時間に 1 を加え、分に 60 を加え、それを時間と分の差に加算する必要があります。
main()
関数では、ループと を使用して、cin
複数の時刻データを読み取ります。
読み取られた 4 つの数値がすべて 0 の場合、ループを終了します。それ以外の場合は、 およびTime
型p1
、p2
入力された時間と分をパラメータとして渡します。
時間差を引いた結果を変数にp2
代入し、最後に出力します。p1
difference
difference
コード
#include<iostream>
using namespace std;
// 声明类 Time
class Time {
private:
int hour; // 小时数
int minute; // 分钟数
public:
// 构造函数,默认参数值为 0
Time(int h = 0, int m = 0) {
hour = h;
minute = m;
}
// 友元函数 operator- 的声明
friend int operator- (Time p, Time q);
};
// 定义友元函数 operator-
int operator- (Time q, Time p) {
int c = 0; // 定义时间差变量
int d = 0; // 定义小时差变量
if (p.minute < q.minute || p.minute == q.minute) {
// 如果第一个时间比第二个时间早或相等
d = q.hour - p.hour; // 计算小时差
c = q.minute - p.minute + 60 * d; // 计算时间差(单位:分钟)
return c; // 返回时间差
}
else {
// 如果第一个时间比第二个时间晚
d = q.hour - p.hour - 1; // 计算小时差
c = 60 + q.minute - p.minute + 60 * d; // 计算时间差(单位:分钟)
return c; // 返回时间差
}
}
// 主函数
int main() {
int a, b, c, d; // 定义输入的四个整数
while (cin >> a >> b >> c >> d) {
// 循环读取多组数据
if (a == 0 && b == 0 && c == 0 && d == 0) // 如果读到的数据均为 0
break; // 跳出循环
int difference; // 定义时间差变量
Time p1(a, b); // 创建 Time 类型对象 p1,并传入小时数和分钟数作为参数
Time p2(c, d); // 创建 Time 类型对象 p2,并传入小时数和分钟数作为参数
difference = p2 - p1; // 计算 p2 与 p1 的时间差,并赋值给 difference
cout << difference << endl; // 输出时间差(并换行)
}
return 0; // 返回 0,代表程序顺利结束
}
要約する
このトピックでは主に运算符重载
次のことを調べます。友元函数的使用方法
私は邱です、また会いましょう。