#include #include // for strcpy, strlen, etc. #include "bstring.h" using namespace std; /* char* str; // pointer to dynamic array of char // allocation will always be size+1 int size; // size of string */ ostream& operator<< (ostream& os, const BString& b) { os << b.str; return os; } istream& operator>> (istream& os, BString& b) { } bool operator< (const BString& s1, const BString& s2) { } bool operator> (const BString& s1, const BString& s2) { } bool operator<= (const BString& s1, const BString& s2) { } bool operator>= (const BString& s1, const BString& s2) { } bool operator== (const BString& s1, const BString& s2) { } bool operator!= (const BString& s1, const BString& s2) { } BString operator+(const BString& s1, const BString& s2) { } BString::BString() // default constructor, set the string to an empty string { size = 0; str = new char[size + 1]; str[0] = '\0'; } BString::BString(const char* s) // conversion constructor (to set string as the incoming cstring s) { size = strlen(s); // get size of incoming cstring str = new char[size + 1]; // allocate space in object strcpy(str, s); // copy data from cstring into object } BString::~BString() { if (str != 0) delete[] str; } void BString::Clone(const BString& bs) { size = bs.size; str = new char[size+1]; strcpy(str, bs.str); } BString::BString(const BString& bs) // copy constructor, created for deep copy of dynamic string { Clone(bs); } BString& BString::operator=(const BString& bs) { if (this != &bs) // IF they are different objects, copy them { delete[] str; // clean up existing storage first Clone(bs); } return *this; } BString& BString::operator+= (const BString& bs) { } int BString::GetSize() const { } void BString::Resize(int newsize) { }