<< Оператор Переписать, чтобы cout int и double значения - PullRequest
1 голос
/ 06 декабря 2010

Мне нужно переписать оператор <<, чтобы он мог указывать значения для часа (int) и температуры (double). </p>

Я думаю, что я включил все необходимые разделы.Заранее спасибо.

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 ]

4 голосов
/ 06 декабря 2010

Например, например:

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);
};
3 голосов
/ 06 декабря 2010

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 голосов
/ 06 декабря 2010

Вы, вероятно, хотите что-то вроде

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

Хотя это довольно простая вещь, и если это не имеет смысла, вам следует по-настоящему поговорить с кем-нибудь или взять книгу.

И если это все еще не имеет смысла, или вы не можете быть обеспокоены, подумайте о выборе другого хобби / карьеры.

2 голосов
/ 06 декабря 2010
r.hour()
r.temperature()

Вы объявили hour и temperature как член поля из Reading, а не член методы .Таким образом, они просто r.hour и r.temperature (нет ()).

2 голосов
/ 06 декабря 2010

Используйте параметр ost, например, std :: cout в operator <<.</p>

1 голос
/ 06 декабря 2010

Вы можете перегрузить такой оператор в 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
     }
}
1 голос
/ 06 декабря 2010

Поскольку часы и температура являются переменными, а не функциями, просто удалите завершающий () из функций operator<<.

...