В настоящее время я отвечаю на вопросы, касающиеся перегрузки операторов в C ++. У меня есть вопрос:
Создайте простой класс, содержащий int, и перегрузите оператор + как функцию-член. Также предоставьте функцию-член print (), которая принимает ostream & в качестве аргумента и печатает в этот ostream &. Протестируйте свой класс, чтобы убедиться, что он работает правильно.
Я могу создать класс и написать функцию оператор +, но я действительно не понимаю вторую часть вопроса. Пока что в моем исследовании C ++ я действительно не встречал ostream, и поэтому не уверен, можно ли явно создать такой поток. Я пробовал использовать:
std :: ostream o;
Однако это вызывает ошибку. Может ли кто-нибудь просветить меня, как мне создать эту функцию, пожалуйста?
Ответ 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 и т. Д.)