#include using namespace std; class String { int len; char *chars; public: String(const char *s) : len(strlen(s)), chars(new char[len]) { for (int i = 0; i < len; i++) chars[i] = s[i]; } // default constructor String() : len(0), chars(new char[0]) {} // destructor virtual ~String() { delete[] chars; } // copy constructor String(const String &s) : len(s.len), chars(new char[len]) { for (int i = 0; i < len; i++) chars[i] = s.chars[i]; } // assignment operator String & operator= (const String &s) { if (&s != this) { // don't copy onto self delete[] chars; len = s.len; chars = new char[len]; for (int i = 0; i < len; i++) chars[i] = s.chars[i]; } return *this; } // print out a string void print() const { cout << '"'; for (int i = 0; i < len; i++) cout << chars[i]; cout << '"'; cout << endl; } }; int main(int argc, char *argv[]) { String s1; String s2 = s1; String s3 = "fred"; s2 = s3; s2 = s2; // nothing happens s1.print(); s2.print(); s3.print(); return 0; }