<<运算符重写为cout int和double值

时间:2010-12-05 23:54:03

标签: c++ iostream ostream

我需要重写<<运算符,以便它可以cout小时(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));
    }

}

7 个答案:

答案 0 :(得分: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);
};

答案 1 :(得分:3)

你可能想要像

这样的东西
ost << r.hour << ' ' << r.temperature;

这是非常简单的东西,如果它没有意义,你应该真的和别人说话或买书。

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

答案 2 :(得分: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; }
}

答案 3 :(得分:2)

在运算符&lt;&lt;中使用类似std :: cout的ost参数。

答案 4 :(得分:2)

r.hour()
r.temperature()

您已将hourtemperature声明为Reading的成员字段,而不是成员方法。因此,它们只是r.hourr.temperature(无())。

答案 5 :(得分:1)

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

答案 6 :(得分: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
     }
}