Создайте функцию печати, которая принимает ostream в качестве аргумента и записывает в этот поток - PullRequest
4 голосов
/ 24 августа 2011

В настоящее время я отвечаю на вопросы, касающиеся перегрузки операторов в C ++.У меня вопрос:

Создайте простой класс, содержащий int, и перегрузите оператор + как функцию-член.Также предоставьте функцию-член print (), которая принимает ostream & в качестве аргумента и печатает в этот ostream &.Протестируйте свой класс, чтобы показать, что он работает правильно.

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

std :: ostream o;

Однако это приводит к ошибке.Может ли кто-нибудь объяснить мне, как мне создать эту функцию, пожалуйста?

Ответы [ 2 ]

9 голосов
/ 24 августа 2011

До сих пор в моем исследовании c ++ я действительно не сталкивался с ostream и поэтому не уверен, возможно ли явно создать такой поток.Я пытался использовать: std :: ostream o;

Вы, должно быть, что-то пропустили, потому что ostreams важны.Кстати, std :: cout - это переменная типа std :: ostream.Использование более или менее похоже на это

#include <iostream> //defines "std::ostream", and creates "std::ofstream std::cout"
#include <fstream> //defines "std::ofstream" (a type of std::ostream)
std::ostream& doStuffWithStream(std::ostream &out) { //defines a function
    out << "apples!";
    return out;
}
int main() {
    std::cout << "starting!\n"; 
    doStuffWithStream(std::cout); //uses the function

    std::ofstream fileout("C:/myfile.txt"); //creates a "std::ofstream"
    doStuffWithStream(fileout); //uses the function

    return 0;
}
4 голосов
/ 24 августа 2011

Вы не создаете ostream, вы создаете ссылку ostream, как сказано в вашем вопросе об упражнении.И вы делаете это в списке параметров вашей функции печати, то есть

void print(std::ostream & os);

Затем вы можете вызывать эту функцию, передавая cout или любой другой объект класса, производного от ostream (ofstream, ostringstream и т. Д.)..)

...