Bap Johnston
Bap Johnston

Reputation: 359

Create a print function that takes an ostream as an argument and writes to that stream

Im currently anwsering exercise questions concerning operator overloading in C++. I have a question:

Create a simple class containing an int and overload the operator+ as a member function. Also provide a print( ) member function that takes an ostream& as an argument and prints to that ostream&. Test your class to show that it works correctly.

I can create the class and write the operator+ function alright but I really dont understand the second part of the question. So far in my study of c++ I havent really come across ostream's and as such am not sure if its possible to explicitly create such a stream. I have tried using:

std::ostream o;

However this produces an error. Could someone please enlighten me on how I should create this function please?

Upvotes: 5

Views: 38370

Answers (2)

Mooing Duck
Mooing Duck

Reputation: 66932

So far in my study of c++ I havent really come across ostream's and as such am not sure if its possible to explicitly create such a stream. I have tried using: std::ostream o;

You must have missed something, because ostreams are important. std::cout is a variable of type std::ostream by the way. Usage is more or less like this

#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;
}

Upvotes: 10

Benjamin Lindley
Benjamin Lindley

Reputation: 103713

You don't create an ostream, you create an ostream reference, like your exercise question said. And you do it in the parameter list of your print function, i.e.

void print(std::ostream & os);

Then you can call that function, passing cout or any other object of a class derived from ostream(ofstream, ostringstream, etc...)

Upvotes: 4

Related Questions