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,则应将其声明为 a 。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

IIRC,您可以通过以下两种方式之一进行操作...

// 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 回答
3

你可能想要类似的东西

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

不过,这是非常简单的事情,如果没有意义,您应该真正与某人交谈或买一本书。

如果它仍然没有意义或者你不能被打扰,考虑选择另一个爱好/职业。

于 2010-12-06T00:59:02.643 回答
2

在 operator<< 中使用像 std::cout 这样的 ost 参数。

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

您已将hour和声明temperature为 的成员字段Reading而不是成员方法。因此它们是简单的r.hourr.temperature(no ())。

于 2010-12-06T01:02:57.367 回答
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 回答
1

由于小时和温度是变量而不是函数,因此只需()operator<<函数中删除尾随。

于 2010-12-06T01:03:46.750 回答