llvm::raw_ostream is an abstract class with two important pure virtual functions implemented by subclasses; write_impl() which holds the logic for writing data to the underlying stream and current_pos() which returns the position currently being written to in the stream.
LLVM provides the following output stream implementations:
outs() for writing to stdout 
errs() for writing to stderr 
nulls() which discards the output (like writing to /dev/null) 
raw_fd_ostream(StringRef, std::error_code) for writing to a file descriptor 
raw_string_ostream(std::string) for writing to a std::string 
The first 3 streams directly return a reference to their stream objects. For example:
llvm::raw_ostream &output = llvm::outs();
For the other streams, you construct objects the old way. For example:
std::string str;
llvm::raw_string_ostream output(str);
For printing, every llvm::Value* has a print method that accepts a raw_ostream object.