1

重複の可能性:
演算子のオーバーロード

「時間の長さを表すDurationというクラスを実装する必要があります。これは、時間、分、秒で表されます。たとえば、CDのトラックの長さや、マラソンの実行にかかる時間などです。クラスは適切なコンストラクター(エラーチェックを含む)とアクセサーメソッドのセットがあります。コンストラクターの1つは、期間を秒単位で表す単一の整数を使用して、Durationオブジェクトの初期化を許可する必要があります。<<および>>演算子は、オーバーロードして許可する必要があります。ストリームを介したDurationオブジェクトの入力と出力。期間オブジェクトは、\ h:mm:ss "の形式で出力する必要があります(例:\ 1:39:33"、\ 0:09:07 "、\ 1:00:08")。また、加算演算子+は、2つのDurationオブジェクトを一緒に加算して新しいDurationオブジェクトを生成できるように、また整数の秒数をDurationオブジェクトに追加できるようにオーバーロードする必要があります。最後に、クラスは、Durationオブジェクトから期間を秒単位で表す整数への型変換を定義する必要があります。」

    #include <iostream>
    #include <stdlib.h>
    using namespace std;
    using std::cout;
    using std::cin;
    using std::ostream;
    using std::istream;

    class Duration 
    {
        private:
        int hours, minutes, seconds;
        int theSeconds;

        public:
        Duration() //default constructor.
        {}

        Duration(int hr, int min, int sec) //ordinary constructor.
        {
            hours = hr;
            minutes = min;
            seconds = sec;
        }

        inline int getHours()
        {
            return hours;
        }

        inline int getMinutes()
        {
            return minutes;
        }

        inline int getSeconds()
        {
            return seconds;
        }
    };

うまくいけば、私はこれまでのところこのタスクで正しい方向に進んでいます(今週はc ++に新しくなりました)。しかし、私は太字で強調した部分とその後のすべてを実装する方法に苦労しています...

アドバイスして助けてください。また、これはコースワークなどではないことに注意してください。私は来年のC++で自分自身を準備しようとしています。ありがとうございました。

4

1 に答える 1

1

std::ostream &次のように、-returning関数を実装する必要があります。

class Duration {

    int hours, minutes, seconds;
    int theSeconds;

    public:

        friend std::ostream & operator << (std::ostream & os, const Duration & dObj) {

            os << "The hours are " << dObj.hours << '\n';
            os << "The minutes are " << dObj.minutes << '\n';

            // ... and so on

        }

        Duration() {}
        Duration(int hr, int min, int sec) {
            hours = hr;
            minutes = min;
            seconds = sec;
    }

};

operator>>同じ方法で定義します。

friend std::istream & operator >> ( std::ostream & os, const Duration dObj ) {

    os >> dObj.minutes >> dObj.hours /* >> ... */;

    return os;

}

したがって、次のように使用できます。

Duration d;

std::cin >> d;

std::cout << d;
于 2012-11-01T18:41:04.530 に答える