-1

Duration という名前の構造体があります。Duration 型のオブジェクトを返すようにこの関数を変更するにはどうすればよいですか? もう1つの質問は、関数をオーバーロードする必要がある場合、どのようにdurationオブジェクトを受け入れるようにするかということです?

void all(clock_t t, int &hours, int &minutes, int &seconds, int &ticks) {
    ticks = t % CLOCKS_PER_SEC;
    seconds = t / CLOCKS_PER_SEC;
    minutes = seconds / 60;
    seconds %= 60;
    hours = minutes / 60;
    minutes %= 60;
}
4

1 に答える 1

2

あなたのDuration構造が次のようなものだとしましょう:

struct Duration {
   int hours, minutes, seconds, ticks;
};

all()メソッドは次のようになります。

Duration all(clock_t t) {
    Duration duration;
    duration.ticks = t % CLOCKS_PER_SEC;
    duration.seconds = t / CLOCKS_PER_SEC;
    duration.minutes = duration.seconds / 60;
    duration.seconds %= 60;
    duration.hours = duration.minutes / 60;
    duration.minutes %= 60;
    return duration;
}

そして、次のように呼び出されます。

clock_t t = ...;
Duration duration = all(t);

他の質問に答えるために、出力all()を受け入れるためにオーバーロードする場合は、次のようになります。Duration

void all(clock_t t, Duration &duration) {
    duration.ticks = t % CLOCKS_PER_SEC;
    duration.seconds = t / CLOCKS_PER_SEC;
    duration.minutes = duration.seconds / 60;
    duration.seconds %= 60;
    duration.hours = duration.minutes / 60;
    duration.minutes %= 60;
}

そして、次のように呼び出されます。

clock_t t = ...;
Duration duration;
all(t, duration);

オーバーロードする場合は、次のように、1 つのオーバーロードを別のオーバーロードを使用して実装し、コードの重複を減らすことができます。

Duration all(clock_t t) {
    Duration duration;
    duration.ticks = t % CLOCKS_PER_SEC;
    duration.seconds = t / CLOCKS_PER_SEC;
    duration.minutes = duration.seconds / 60;
    duration.seconds %= 60;
    duration.hours = duration.minutes / 60;
    duration.minutes %= 60;
    return duration;
}

void all(clock_t t, Duration &duration) {
    duration = all(t);
}

またはこれ:

void all(clock_t t, Duration &duration) {
    duration.ticks = t % CLOCKS_PER_SEC;
    duration.seconds = t / CLOCKS_PER_SEC;
    duration.minutes = duration.seconds / 60;
    duration.seconds %= 60;
    duration.hours = duration.minutes / 60;
    duration.minutes %= 60;
}

Duration all(clock_t t) {
    Duration duration;
    all(t, duration);
    return duration;
}
于 2013-03-28T21:51:54.300 に答える