Перегрузка глобальной функции getline в классе c ++ - PullRequest
0 голосов
/ 22 октября 2011

Я работаю над школьным проектом по реализации класса c ++ для полиномов.Что-то, что должен делать мой класс, - это читать полиномы из стандартного файла или из файла.Я думал о перегрузке >>, пока не прочитал следующее на моем любимом ссылочном сайте c ++ :

Обратите внимание, что операции извлечения istream используют пробелы в качестве разделителей, поэтому эта операция будет извлекать толькочто можно считать словом из потока.Чтобы извлечь целые строки текста, обратитесь к перегрузке строк глобальной функции getline.

Это вдохновило меня на перегрузку глобальной функции getline для моего полиномиального класса, чтобы он мог читать целые строки изфайл.Есть много учебников и статей, описывающих, как перегрузить оператор извлечения потока, но я не смог найти какие-либо подробности о getline.Должен ли я просто перегрузить его, как я хочу?Из ссылки видно, как это делается.

В некоторых из перегруженных функций getline, которые я видел (например, внизу страницы, на которую ссылаются), я заметил, что они возвращают что-то вроде «basic_istream»,Достаточно ли того, что я просто вернул istream?Как насчет "char_type"?Достаточно ли будет символа?

По сути, я хочу знать: перезагружает ли это что-то из этого, или есть какая-то привередливая деталь, о которой я должен беспокоиться?

Это заголовок, который яприготовлено:

class Polynomial {

  public:
    friend istream& getline(istream& is, Polynomial & poly);
    friend istream& getline(istream& is, Polynomial & poly, char delim);

};

friend istream& getline(istream& is, Polynomial & poly) {

    return getline(is, poly, '\n');
}

friend istream& getline(istream& is, Polynomial & poly, char delim) {
    // read enough tokens to make a term
    // stop when we get to the delimiter

    return is;
}

Спасибо!

1 Ответ

3 голосов
/ 22 октября 2011

Вы все равно должны перегрузить operator >>. В рамках реализации вашего оператора вы можете извлечь столько слов, сколько вам нужно (я предполагаю, что по одному на коэффициент или около того). Не пытайтесь перегрузить getline, это означает, что строка не Polynomial.

...