Тип возврата ostream для производного класса - PullRequest
0 голосов
/ 30 апреля 2018

С наследованием я пытаюсь создать перегруженный оператор вывода в моем базовом классе, который вызывает функцию вывода в соответствующем производном классе, чтобы печатать правильные данные в зависимости от типа объекта.

Как вы возвращаете вывод, который можно отправить в перегруженный оператор вывода, чтобы вы могли вывести объект с помощью всего cout << object << endl;

Например:

ostream & operator<< (ostream &out, const person &rhs){
    out << rhs.print_data();
    return out;
}

ostream student::print_data(){
    ostream out;
    out << data;
    return out;
}

ostream faculty::print_data(){
    ostream out;
    out << data;
    return out;
}

РЕДАКТИРОВАТЬ: я пытаюсь выяснить, нужно ли мне возвращать тип ostream или ostream & в функции печати

1 Ответ

0 голосов
/ 30 апреля 2018

Потоки не могут быть скопированы , поэтому, если вы хотите вернуть (или передать в качестве аргумента), это должно быть сделано по ссылке. И вы не можете вернуть ссылку на локальную переменную (так как она выйдет из области видимости и «исчезнет»).

Кроме того, базовый объект std::ostream не имеет смысла создавать экземпляры.

Простое решение: передать поток в качестве аргумента (по ссылке, конечно) в функции:

ostream& operator<< (ostream &out, const person &rhs){
    return rhs.print_data(out);  // No need for any output here
}

ostream& student::print_data(ostream& out){
    return out << data;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...