#include using namespace std; class BString { friend bool operator< (const BString& b1, const BString& b2); friend bool operator> (const BString& b1, const BString& b2); friend bool operator<= (const BString& b1, const BString& b2); friend bool operator>= (const BString& b1, const BString& b2); friend bool operator== (const BString& b1, const BString& b2); friend bool operator!= (const BString& b1, const BString& b2); friend BString operator+(const BString& b1, const BString& b2); friend ostream& operator<< (ostream& os, const BString& bs); friend istream& operator>> (istream& is, BString& bs); public: BString(); // default, init string to empty BString(const char* s); // conversion constructor // create string from a c-string ~BString(); BString(const BString& bs); // copy constructor BString& operator=(const BString& bs); // assignment operator BString& operator+= (const BString& bs); // concat and assign int Size() const; // return the size of the string BString Substring(int start, int length) const; private: char* str; // pointer to dynamically allocated string // stored as a char array int size; // tracking variable, size of string // allocated space will always be size + 1 void Resize(int newsize); // resize string to newsize };