Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Создайте функцию печати, которая принимает в качестве аргумента ostream и записывает в этот поток

Автор вопроса: Bap JohnstonОтветов: 2

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

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

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

std :: ostream o;

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

  • cout - это ostream. Вы уверены, что не сталкивались с этим? Bill 24.08.2011
  • Я действительно понимаю, что cout - это ostream, однако это столько же, сколько iv использовал его, однако iv никогда не просили передать его в качестве аргумента, поэтому я не был уверен, как это сделать. Bap Johnston 24.08.2011

c++operator-overloadingostream

Ответы

Ответ 1 · рейтинг 10 · Mooing Duck

Пока что в моем исследовании C ++ я действительно не встречал ostream, и поэтому не уверен, можно ли явно создать такой поток. Я пробовал использовать: std :: ostream o;

Вы, должно быть, что-то упустили, потому что потоки важны. Кстати, 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;
}

Ответ 2 · рейтинг 4 · Benjamin Lindley

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

void print(std::ostream & os);

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы