10.4. Making a Class Writable to a Stream

Problem

You have to write a class to an output stream, either for human readability or persistent storage, i.e., serialization.

Solution

Overload operator<< to write the appropriate data members to the stream. Example 10-6 shows how.

Example 10-6. Writing objects to a stream

#include <iostream> #include <string> using namespace std; class Employer { friend ostream& operator<< // This has to be a friend (ostream& out, const Employer& empr); // so it can access non- public: // public members Employer() {} ~Employer() {} void setName(const string& name) {name_ = name;} private: string name_; }; class Employee { friend ostream& operator<< (ostream& out, const Employee& obj); public: Employee() : empr_(NULL) {} ~Employee() {if (empr_) delete empr_;} void setFirstName(const string& name) {firstName_ = name;} void setLastName(const string& name) {lastName_ = name;} void setEmployer(Employer& empr) {empr_ = &empr;} const Employer* getEmployer() const {return(empr_);} private: string firstName_; string lastName_; Employer* empr_; }; // Allow us to send Employer objects to an ostream... ostream& operator<<(ostream& out, const Employer& empr) { out << empr.name_ << endl; return(out); } // Allow us to send Employee objects to an ostream... ostream& operator<<(ostream& out, const Employee& emp) { out << emp.firstName_ << endl; out << emp.lastName_ << endl; if (emp.empr_) out << *emp.empr_ << endl; return(out); } int main() { Employee emp; string first = ...

Get C++ Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.