1

<< 演算子を書き直して、時間 (int) と温度 (double) の値を計算できるようにする必要があります。

必要なセクションはすべて含まれていると思います。前もって感謝します。

struct Reading {
    int hour;
    double temperature;
    Reading(int h, double t): hour(h), temperature(t) { }
    bool operator<(const Reading &r) const;
};

========

ostream& operator<<(ostream& ost, const Reading &r)
{
    // unsure what to enter here

    return ost;
}

========

vector<Reading> get_temps()
{
// stub version                                                                 
    cout << "Please enter name of input file name: ";
    string name;
    cin >> name;
    ifstream ist(name.c_str());
    if(!ist) error("can't open input file ", name);

    vector<Reading> temps;
    int hour;
    double temperature;
    while (ist >> hour >> temperature){
        if (hour <0 || 23 <hour) error("hour out of range");
        temps.push_back( Reading(hour,temperature));
    }

}

4

7 に答える 7

4

たとえば、次のようにします。

bool operator <(Reading const& left, Reading const& right)
{
    return left.temperature < right.temperature;
}

そして、それはグローバル関数 (または と同じ名前空間内Reading) であり、メンバー またはではありません。保護されたメンバーまたはプライベート メンバーを使用する場合Readingは、 として宣言する必要があります。friendこれは次のように実行できます。

struct Reading {
    int hour;
    double temperature;
    Reading(int h, double t): hour(h), temperature(t) { }

    friend bool operator <(Reading const& left, Reading const& right);
};
于 2010-12-06T03:49:12.087 に答える
3

あなたはおそらく次のようなものが欲しいでしょう

ost << r.hour << ' ' << r.temperature;

これは非常に単純なことですが、意味がない場合は、誰かと話すか、本を入手する必要があります。

それでも意味がない場合や気にならない場合は、別の趣味/キャリアを選択することを検討してください。

于 2010-12-06T00:59:02.643 に答える
3

IIRC、あなたはそれを2つの方法のいずれかで行うことができます...

// overload operator<
bool operator< ( const Reading & lhs, const Reading & rhs )
{
  return lhs.temperature < rhs.temperature;
}

または、構造体に演算子を追加できます...

struct Reading {
  int hour;
  double temperature;
  Reading ( int h, double t ) : hour ( h ), temperature ( t ) { }
  bool operator< ( const Reading & other ) { return temperature < other.temperature; }
}
于 2010-12-06T03:54:28.043 に答える
2

演算子<<でstd::coutのようなostパラメータを使用します。

于 2010-12-06T00:06:00.657 に答える
2
r.hour()
r.temperature()

メンバーメソッドではなく、のメンバーフィールドとしてhourandを宣言しました。したがって、それらは単純に and (no ) です。temperatureReadingr.hourr.temperature()

于 2010-12-06T01:02:57.367 に答える
1

時間と温度は関数ではなく変数であるため、関数()から末尾を削除するだけoperator<<です。

于 2010-12-06T01:03:46.750 に答える
1

C++ では、このような演算子をオーバーロードできます。

struct Reading {
     int hour;
     double temperature;
     Reading(int h, double t): hour(h), temperature(t) { }
     bool operator<(struct Reading &other) {
         //do your comparisons between this and other and return a value
     }
}
于 2010-12-06T03:52:30.710 に答える